无法在UWP应用程序中获取某些用户帐户信息 – 内部部署活动目录(非Azure AD)
在UWP应用程序中,我启用了User Account Information
function。
我需要获取当前登录用户的用户名和域名(每个用户名单独)(用户使用内部部署的Active Directory帐户登录 – 非Azure AD )。
例如,用户将使用用户名user1
登录到Active Directory域domain1
。 即domain1\user1
。
我使用以下代码来尝试获取所需的详细信息:
IReadOnlyList 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
返回一个空字符串。 即“”。 为什么这不会返回任何价值?
我还检查了以下内容:
-
KnownUserProperties.FirstName
返回一个空字符串。 即“” -
KnownUserProperties.LastName
返回一个空字符串。 即“” -
KnownUserProperties.PrincipalName
返回一个空字符串。 即“” -
KnownUserProperties.ProviderName
返回一个空字符串。 即“” -
KnownUserProperties.GuestHost
返回一个空字符串。 即“”
我需要启用类似于User Account Information
function的其他任何内容吗? 或者是否有任何其他权限需要授予应用程序才能获取此信息?
我知道我可以获取strDomainName
的值并执行字符串函数来获得我需要的东西。 但我想知道是否有任何方法可以直接获取此信息。 同样好奇为什么KnownUserProperties.AccountName
和上面列出的其他属性如FirstName
, LastName
等只返回一个空字符串。
我正在运行以下版本的Windows:
我有以下设置作为Target version
和Min Version
:
为了validation,我还使用Microsoft的GitHub对UserInfo示例项目进行了测试,得到了以下输出:
在Settings
> Privacy
> Account Info
自动启用以下内容。
TestApp
是我尝试过的应用程序, User Info C# Sample
是GitHub的示例应用程序:
AccountInfo”>
更新:
在启用Enterprise Authentication
function后, KnownUserProperties.PrincipalName
会返回预期值。 即user1@domain1.com
。 但是,上面列出的其他属性,如FirstName
, LastName
等只返回一个空字符串,我仍然无法找到任何返回domain1\user1
属性(没有.com
部分)
您尝试访问的信息不可靠,因为它们(如您所述)不必设置,并且通常也可以通过隐私设置限制访问。
我遇到了类似的问题,建议您使用UWP OneDrive API
using Microsoft.OneDrive.Sdk;
然后请求wl.basic
范围。 此范围至少包含可靠的用户名。
public static async Task GetAuthenticatedClient() { string oneDriveConsumerBaseUrl = "https://api.onedrive.com/v1.0"; var scopes = new List { "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()
所述,如此处所述。
- Active Directory PrincipalContext.ValidateCredentials域消除歧义
- 如何在c#中从SmartCard读取凭据
- ActiveDirectoryMembershipProvider用于validation用户
- 如何查找当前用户具有WriteProperty访问权限的ActiveDirectory中的所有组?
- 在.Net 4.5中检查Active Directory组成员身份
- 如何获取域控制器IP地址
- 活动目录 – 用户的角色
- c #Active Directory服务findAll()仅返回1000个条目
- ASP.NET如何获取Active Directory中的组列表