我想要一个ASP的登录系统。. Net MVC 5网站由Azure Active Directory支持。
具体来说,我想知道用户是否是特定组的成员,并基于此授予访问权限。
我有代码查询用户/组在AD,只有用户从AD得到微软认证和重定向到网站。
但似乎我需要用户的主体名称(UPN, ClaimTypes.Upn)来查询Azure AD图API,而OpenID连接提供程序只是给了我一些版本的用户电子邮件地址:
From OpenID Connect:
User.Identity.Name = live.com#timm@domain.tld
来自AD Graph API:
用户。UserPrincipalName = timm_domain#EXT@something.onmicrosoft.com
是否有可能获得内部用户GUID或从一个ID到另一个ID,以便能够查询当前用户的AD图API ?
确实。从客观标识符声明中获取用户的ObjectId,使用:
ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier")value
UPN属性默认情况下为常规组织帐户设置-而您是作为MSA (Microsoft帐户)外部用户进行签名的。默认情况下,MSA外部用户没有设置UPN属性。也就是说,您不需要用户的UPN来使用Graph API查询他们的组成员关系-建议使用ObjectId。此外,出于授权目的,我们建议使用getMemberGroup API,该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"
}