Azure Active Directory:使用OpenID Connect身份验证获取用户的UPN

时间:2014-06-18 15:59:35

标签: active-directory openid azure-active-directory

我希望ASP.Net MVC 5网站的登录系统由Azure Active Directory支持。

具体来说,我想知道用户是否是特定群组的成员,并根据该群组提供访问权。

我有代码来查询AD中的用户/组,只有来自AD的用户才能获得Microsoft的身份验证并重定向到该网站。

但似乎我需要用户的主体名称(UPN,ClaimTypes.Upn)来查询Azure AD图形API,而OpenID Connect Provider只是给了我一些版本的用户的权限。邮箱地址:

来自OpenID Connect:
User.Identity.Name = live.com#timm@domain.tld

来自AD Graph API:
user.UserPrincipalName = timm_domain#EXT@something.onmicrosoft.com

是否有可能获取内部用户GUID或从一个ID获取另一个ID以便能够为当前用户查询AD图API?

1 个答案:

答案 0 :(得分:3)

事实上。使用以下命令从objectidentifier声明中获取用户的ObjectId:

  

ClaimsPrincipal.Current.FindFirst(" http://schemas.microsoft.com/identity/claims/objectidentifier&#34)。值

默认情况下,为常规组织帐户设置UPN属性 - 而您签名时则为MSA(Microsoft帐户)外部用户。 MSA外部用户默认情况下没有设置UPN属性。也就是说,您不需要用户的UPN使用Graph API查询其成员资格 - 建议使用ObjectId。此外,我们建议您出于授权目的使用getMemberGroup API来返回用户的可传递组成员身份。

希望这有帮助。


有关其他声明类型的参考:Azure AD为MSA外部用户发出的原始JWT访问令牌如下所示:

{
"family_name": "Guest", 
"unique_name": "Live.com#aadguest@outlook.com", 
"altsecid": "1:Live.com:00034001C80D80E9", 
"ver": "1.0", 
"aud": "https://graph.windows.net", 
"acr": "1", 
"iss": "https://sts.windows.net/62e173e9-301e-423e-bcd4-29121ec1aa24/", 
"oid": "fa6fa59a-5f2b-4069-a8e4-c76e52179f64", 
"scp": "Directory.Read UserProfile.Read", 
"idp": "Live.com", 
"email": "aadguest@outlook.com", 
"appidacr": "1", 
"given_name": "AAD", 
"exp": 1403260411, 
"appid": "29181964-d91b-4331-859d-d815863848d6", 
"tid": "62e173e9-301e-423e-bcd4-29121ec1aa24", 
"iat": 1403256511, 
"amr": [
    "pwd"
], 
"nbf": 1403256511, 
"sub": "Wi6CVQ6FVj_aj3na076wm-C6eJy6CK6YhB3PR9Jpty0"
}