【问题标题】:Azure Active Directory: Get user's UPN with OpenID Connect authenticationAzure Active Directory:使用 OpenID Connect 身份验证获取用户的 UPN
【发布时间】:2014-06-18 15:59:34
【问题描述】:

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

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

我有代码可以查询 AD 中的用户/组,只有 AD 中的用户才能通过 Microsoft 的身份验证并重定向到网站。

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

来自 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?

【问题讨论】:

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


    【解决方案1】:

    的确如此。从 objectidentifier 声明中获取用户的 ObjectId,使用:

    ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value

    默认情况下为常规组织帐户设置 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"
    }
    

    【讨论】:

    • 非常感谢。这正是我所需要的。虽然我不敢相信 ObjectID 不在 ClaimTypes 枚举中。现在一切都说得通了:)
    • 我只是得到一个空引用错误,但我可以在Current 中看到我的身份当我导航到http://schemas.microsoft.com/identity/claims/objectidentifier 时也注意到它只是说The resource you are looking for has been removed, had its name changed, or is temporarily unavailable. 这仍然是获取用户的正确方法吗指导?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多