2017-03-22 2 views
7

UWP 앱에서 User Account Information 기능을 사용하도록 설정했습니다.UWP 앱에서 일부 사용자 계정 정보를 가져올 수 없습니다 - 사내 구축 형 활성 디렉토리 (Azure AD가 아님)

현재 로그온 한 사용자의 사용자 이름과 도메인 이름 (각각 별도로)을 가져와야합니다. 사용자는 회사 내 Active Directory 계정 (Not Azure AD)으로 로그온합니다.

예를 들어, 사용자는 user1 사용자 이름을 사용하여 domain1 Active Directory 도메인에 로그인합니다. 즉 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은 빈 문자열을 반환합니다. 즉 "". 왜 이것이 어떤 가치를 반환하지 않습니까?

    • KnownUserProperties.FirstName은 빈 문자열을 반환

  • 은 또한 다음 확인. 즉 "" "
  • KnownUserProperties.LastName은 빈 문자열을 반환합니다. 즉 "" "
  • KnownUserProperties.PrincipalName은 빈 문자열을 반환합니다. 즉 "" "
  • KnownUserProperties.ProviderName은 빈 문자열을 반환합니다. 즉 "" "
  • KnownUserProperties.GuestHost은 빈 문자열을 반환합니다. 즉 "" "

User Account Information 기능과 비슷한 기능을 활성화해야합니까? 아니면이 정보를 얻기 위해 앱에 부여해야하는 다른 권한이 있습니까?

나는 strDomainName의 가치를 얻을 수 있고 필요한 것을 얻기 위해 문자열 기능을 수행 할 수 있음을 알고 있습니다. 그러나이 정보를 직접 얻을 수있는 방법이 있는지 알고 싶습니다. 또한 궁금한 이유가 KnownUserProperties.AccountName이고 위에 나열된 다른 속성 인 FirstName, LastName 등은 빈 문자열을 반환합니다.

Windows Version

나는이 (가) Target versionMin Version로 설정 다음과 같습니다 :

나는 다음과 같은 Windows 버전을 실행하고

Target version and Min Version

가 확인하려면를, 나 또한 테스트 UserInfo sample project by Microsoft from GitHub 그리고 다음 출력을 얻었습니다 :

UserInfo Sample project output

다음가 자동으로 Settings>Privacy>Account Info에서 활성화되었습니다.

TestApp

내가 함께 노력 응용 프로그램과 User Info C# Sample은 GitHub의에서 샘플 응용 프로그램입니다 :

Settings-Privacy->AccountInfo

이 업데이트 :

또한 Enterprise Authentication 기능을 활성화 한 후, KnownUserProperties.PrincipalName가 예상 반환하지 값. 즉 [email protected]입니다. 는하지만, 다른 속성과 같은 FirstName 위에 나열된 등 LastName는 빈 문자열을 반환하고 난 여전히 액세스하려고하는 정보는

답변

0

합니다 (.com 부분없이) domain1\user1을 반환하는 모든 속성을 찾을 수 없습니다입니다 (당신이 언급 한) 설정이 필요 없으며 일반적으로 개인 정보 설정을 통한 액세스가 제한 될 수 있으므로 신뢰할 수 없습니다.

나는 비슷한 문제가 있었하고 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; 
} 

도메인에 관해서는, 나는 확실하지 않다,하지만 당신은 MSDN에 설명 또는 Windows.Networking.Connectivity.NetworkInformation.GetHostNames()처럼이 here 설명과 같이 Environment.UserDomainName을 통해 접근을 시도 할 수 있습니다.