2016-10-23 125 views
0

任何人都可以告诉我在查询中写什么来获取登录用户,AD用户名? !不GivenName,FamilyName,显示名称---- 我需要域** me.username **,以及我有域,所以只是用户名。 这完美地工作,检索用户的AD组,所以我应该改变什么来获取用户名。如何使用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的用户的Internet风格登录名。按照惯例,这应该映射到用户的电子邮件名称。一般格式是“别名@域”。对于工作或学校帐户,域名必须出现在承租人的经过验证的域名集合中。创建工作或学校帐户时需要此属性;本地帐户是可选的。

这里是使用Azure的图形客户端来获取此属性供您参考代码:

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

如果你是直接调用Azure的图形REST,您可以参考以下要求:

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

谢谢,我只会用@分割它,一切都可以 – LuckyLyck

相关问题