Active directory Azure Active Directory:获取用户';具有OpenID连接身份验证的s UPN

Active directory Azure Active Directory:获取用户';具有OpenID连接身份验证的s UPN,active-directory,openid,azure-active-directory,Active Directory,Openid,Azure Active Directory,我希望ASP.NETMVC5网站的登录系统由Azure Active Directory支持 具体来说,我想知道用户是否是特定组的成员,并基于此授予访问权限 我有在广告中查询用户/组的代码,只有来自广告的用户才能通过Microsoft的身份验证并重定向到网站 但我似乎需要用户的主体名称(UPN,ClaimTypes.UPN)来查询Azure AD graph API,而OpenID Connect提供程序只提供了用户电子邮件地址的某些版本: 从OpenID连接: User.Identity.Na

我希望ASP.NETMVC5网站的登录系统由Azure Active Directory支持

具体来说,我想知道用户是否是特定组的成员,并基于此授予访问权限

我有在广告中查询用户/组的代码,只有来自广告的用户才能通过Microsoft的身份验证并重定向到网站

但我似乎需要用户的主体名称(UPN,ClaimTypes.UPN)来查询Azure AD graph API,而OpenID Connect提供程序只提供了用户电子邮件地址的某些版本:

从OpenID连接:
User.Identity.Name=
live.com#timm@domain.tld

来自广告图API:
user.UserPrincipalName=
timm\u域#EXT@something.onmicrosoft.com


为了能够查询当前用户的广告图API,是否有可能获取内部用户GUID或从一个ID获取到另一个ID?

确实如此。使用以下命令从objectidentifier声明中获取用户的ObjectId:

ClaimsPrincipal.Current.FindFirst(“”)值

默认情况下,UPN属性是为常规组织帐户设置的,而您是作为MSA(Microsoft帐户)外部用户进行签名的。默认情况下,MSA外部用户未设置UPN属性。也就是说,您不需要用户的UPN来使用Graph API查询他们的组成员资格,建议使用ObjectId。此外,我们建议出于授权目的,使用返回用户可传递组成员身份的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"
}

非常感谢你。这正是我需要的。虽然我不敢相信ObjectID不在ClaimTypes枚举中。现在一切都有了意义:)我只得到了一个空引用错误,但我可以在
Current
中看到我的身份,当我导航到
http://schemas.microsoft.com/identity/claims/objectidentifier
它只是说
您正在查找的资源已被删除,名称已更改,或暂时不可用。
这仍然是获取用户guid的正确方法吗?