[英]Unable to get some user account information in UWP app - In-premise active directory (Not Azure AD)
在 UWP 应用中,我启用了User Account Information
功能。
我需要获取当前登录用户的用户名和域名(每个都是单独的)(用户使用内部 Active Directory 帐户登录 -不是 Azure AD )。
例如,用户将使用用户名user1
登录到 Active Directory 域domain1
。 即domain1\\user1
。
我正在使用以下代码来尝试获取所需的详细信息:
IReadOnlyList<User> users = await User.FindAllAsync();
var user = users.FirstOrDefault();
// get domain
var data1 = await user.GetPropertyAsync(KnownUserProperties.DomainName);
string strDomainName = (string)data1;
// get username
var data2 = await user.GetPropertyAsync(KnownUserProperties.AccountName);
string strUserName = (string)data2;
问题:
strDomainName
返回domain1.com\\user1
。 为什么这包括我们所有域的.com
部分? 在 c# winforms 应用程序上,我们可以轻松地获得domain1\\user1
没有任何问题。strUserName
返回一个空字符串。 IE ””。 为什么这不返回任何值?我还检查了以下内容:
KnownUserProperties.FirstName
返回一个空字符串。 IE ””KnownUserProperties.LastName
返回一个空字符串。 IE ””KnownUserProperties.PrincipalName
返回一个空字符串。 IE ””KnownUserProperties.ProviderName
返回一个空字符串。 IE ””KnownUserProperties.GuestHost
返回一个空字符串。 IE ”” 我还需要启用类似于User Account Information
功能的其他功能吗? 或者是否需要向应用授予任何其他权限才能获取此信息?
我知道我可以获取strDomainName
的值并执行字符串函数来获取我需要的内容。 但是我想知道是否有任何方法可以直接获取这些信息。 也很好奇为什么KnownUserProperties.AccountName
和上面列出的其他属性(如FirstName
、 LastName
等)只返回一个空字符串。
我正在运行以下版本的 Windows:
我将以下设置为Target version
和Min Version
:
为了验证,我还使用Microsoft 来自 GitHub的UserInfo 示例项目进行了测试,我得到了以下输出:
以下是在Settings
> Privacy
> Account Info
自动启用的。
TestApp
是我尝试使用的应用程序,而User Info C# Sample
是来自 GitHub 的示例应用程序:
更新:
在启用Enterprise Authentication
功能后, KnownUserProperties.PrincipalName
确实返回了预期值。 即user1@domain1.com
。 但是,上面列出的其他属性,如FirstName
、 LastName
等只返回一个空字符串,我仍然无法找到任何返回domain1\\user1
属性(没有.com
部分)
您尝试访问的信息不可靠,因为它们(如您所提到的)不必设置,而且通常可以通过隐私设置限制访问。
我遇到了类似的问题,建议您使用UWP OneDrive API
using Microsoft.OneDrive.Sdk;
然后请求wl.basic
范围。 这个范围至少包含一个可靠的用户名。
public static async Task<bool> GetAuthenticatedClient()
{
string oneDriveConsumerBaseUrl = "https://api.onedrive.com/v1.0";
var scopes = new List<string>
{
"wl.signin",
"wl.basic",
};
Task authTask;
var onlineIdAuthProvider = new OnlineIdAuthenticationProvider(scopes.ToArray());
authTask = onlineIdAuthProvider.RestoreMostRecentFromCacheOrAuthenticateUserAsync();
oneDriveClient = new OneDriveClient(oneDriveConsumerBaseUrl, onlineIdAuthProvider);
AuthProvider = onlineIdAuthProvider;
try
{
await authTask;
if (!AuthProvider.IsAuthenticated)
{
return false;
}
}
catch (ServiceException exception)
{
// Swallow the auth exception but write message for debugging.
//Debug.WriteLine(exception.Error.Message);
return false;
}
return true;
}
至于域名,我不知道,但你可以尝试通过访问它Environment.UserDomainName
像描述的MSDN或Windows.Networking.Connectivity.NetworkInformation.GetHostNames()
等中描述的在这里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.