2016-10-23 8 views
0

Может ли кто-нибудь сказать мне, что написать в запросе, чтобы получить имя пользователя входа в систему, имя пользователя AD? ! NOT GivenName, FamilyName, displayname ---- Мне нужен домен ** me.username **, ну у меня есть домен, поэтому просто имя пользователя. Это прекрасно работает, чтобы получить пользовательские группы пользователей, так что я должен изменить, чтобы получить имя пользователя.Как получить логин/имя пользователя, используя Azure AD Graph API для текущего пользователя

public async Task<List<Groups>> GetAdGroups(string authority, string resource, string clientId, string returnUri) 
    { 
     JObject jResult = null; 
     AuthenticationResult authResult = null; 
     var authContext = new AuthenticationContext(authority); 
     if (authContext.TokenCache.ReadItems().Any()) 
     { 
      authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority); 
     } 
     var platformParams = new PlatformParameters((Activity)Forms.Context); 
     authResult = await authContext.AcquireTokenAsync(resource, clientId, new Uri(returnUri), platformParams); 
     var uri = new Uri(returnUri); 
     string graphRequest = String.Format(CultureInfo.InvariantCulture, "{0}/{1}/users/{2}/memberOf?api-version=1.5", ServiceConstants.graphResourceUri, ServiceConstants.tenant, authResult.UserInfo.UniqueId); 
     HttpClient client = new HttpClient(); 
     HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, graphRequest); 
     request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken); 

     HttpResponseMessage response = await client.SendAsync(request); 
     List<Groups> memberOf = new List<Groups>(); 
     string content = await response.Content.ReadAsStringAsync(); 
     jResult = JObject.Parse(content); 

     if (jResult["odata.error"] != null) 
     { 
      memberOf.Add(new Groups { id = "Error", displayName = (string)jResult["odata.error"]["message"]["value"] }); 
      return memberOf; 
     } 
     if (jResult["value"] == null) 
     { 
      memberOf.Add(new Groups { id = "Error", displayName = "Unknown Error." }); 
      return memberOf; 
     } 
     foreach (JObject result in jResult["value"]) 
     { 
      memberOf.Add(
       new Groups 
       { 
        id = (string)result["objectId"], 
        displayName = (string)result["displayName"] 
       }); 
     } 
     return memberOf; 
    } 

Надеюсь, что кто-то может помочь. С наилучшими пожеланиями, христианин.

+0

Вы также можете декодировать authContext (проверьте https://jwt.io), так как это будет включать имя пользователя. – RasmusW

ответ

0

Чтобы получить имя пользователя для учетной записи Azure AD, мы можем получить userPrincipalName с объекта пользователя. Ниже приведено описание об этом объекте от Entity and complex type reference.

UPN - это имя пользователя в интернет-стиле для пользователя, основанного на стандарте Internet RFC 822. Согласно конвенции, это должно отображаться на имя пользователя электронной почты. Общий формат - «alias @ domain». Для служебных или школьных счетов домен должен присутствовать в коллекции доверенных доменов арендатора. Это свойство требуется, когда создается рабочий или школьный аккаунт; он не является обязательным для локальных учетных записей.

А вот код с помощью Azure Graph клиента, чтобы получить это свойство для справки:

//client is the instance of ActiveDirectoryClient 
client.Me.ExecuteAsync().Result.UserPrincipalName 

И если вы звоните в Azure Graph REST напрямую, вы можете направить запрос ниже:

GET: https://graph.windows.net/me?api-version=1.6 
+0

Спасибо, я тогда просто раздели его @ и все в порядке – LuckyLyck

Смежные вопросы