代码之家  ›  专栏  ›  技术社区  ›  zlog

如何获取Azure AD OAuth登录的登录用户配置文件?

  •  2
  • zlog  · 技术社区  · 6 年前

    JavaScript OAuth2 flow for Azure AD v2 login does not give an access_token ,我试图找出要使用的最佳端点,以获取登录用户的详细信息(例如,显示名称、电子邮件等)。

    然而,我注意到在中有两个潜在的端点可以使用

    1. https://outlook.office.com/api/v2.0/me
    2. https://graph.microsoft.com/v1.0/me

    1,用于 bell for hapijs 并记录在 Use the Outlook REST API 。然而,在贝尔,我似乎无法理解 scope 我需要让它为OAuth 2.0工作。我试过了 openid ,则, email ,则, profile ,则, Mail.Read (只是因为我在一些文档中看到了这一点,才尝试这一点),以及 User.Read ,但前3个作用域不会返回 access_token 根据 JavaScript OAuth2 flow for Azure AD v2 login does not give an access_token ,和最后2个( 邮政阅读 使用者阅读 )给我一个 access\u令牌 ,但他们给我打电话时的身份验证问题 https://outlook.office.com/api/v2.0/me 具有 Authorization: 'Bearer [access_token]

    我在中找到了2的端点 Microsoft Graph: Get user 它似乎与 使用者阅读 范围我使用 access\u令牌 已返回:

    {
      '@odata.context': 'https://graph.microsoft.com/v1.0/$metadata#users/$entity',
      id: '60...',
      userPrincipalName: 'some@email.com',
      businessPhones: [],
      displayName: null,
      jobTitle: null,
      mail: null,
      mobilePhone: null,
      officeLocation: null,
      preferredLanguage: null
    }
    

    这里的回复问题是没有明确的电子邮件字段,但我想我可以 just use userPrincipalName (the 用户PrincipalName 也用于 bell Azure AD provider )

    所以我的问题是我应该使用哪个端点?或者在别的地方还有别的吗?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Marc LaFleur    6 年前

    您应该绝对使用Microsoft Graph来执行此操作和 /v1.0/me endpoint是用于检索用户配置文件信息的正确URI。

    至于查找他们的电子邮件地址,您可以利用以下几个潜在属性:

    • mail :这是用户的默认SMTP地址。如果显示为null,则表明该值未填充。通常由Exchange自动填充,但根据租户的不同,可能需要手动填充。

    • proxyAddresses :这是与用户关联的地址数组。通常,只有在需要显示用户的备选电子邮件别名(即。 name@comp.com & firstname.lastname@comp.com )。

    如果您只想查找非常基本的信息(姓名和电子邮件),那么可以使用OpenID Connect并完全跳过Microsoft Graph调用。OpenID Connect支持将用户的配置文件作为配置文件的一部分返回。

    要使用OpenID Connect,您需要对授权请求进行几项更改(即首次调用 https://login.microsoftonline.com/common/oauth2/v2.0/authorize ):

    1. 这个 response_type 必须包括 id_token 。(例如。 &response_type=id_token+code )
    2. 这个 scope 必须包括 openid ,则, profile email (例如。 &scope=openid profile email user.read )。

    启用后,您将在访问令牌响应中收到一个名为 id\u令牌 。此属性包含一个JSON Web令牌(JWT),您可以对其进行解码以获取用户的配置文件信息:

    作为说明,我使用上述设置从我的测试Azure AD实例请求令牌。我拿了那个令牌并解码了它(我使用了 http://jwt.ms/ 但JWT解码器可以工作)以获取OpenID连接配置文件:

    {
      "typ": "JWT",
      "alg": "RS256",
      "kid": "{masked}"
    }.{
      "aud": "{masked}",
      "iss": "https://login.microsoftonline.com/{masked}/v2.0",
      "iat": 1521825998,
      "nbf": 1521825998,
      "exp": 1521829898,
      "name": "Marc LaFleur",
      "nonce": "a3f6250a-713f-4098-98c4-8586b0ec084d",
      "oid": "f3cf77fe-17b6-4bb6-8055-6aa084df7d66",
      "preferred_username": "marc@officedev.ninja",
      "sub": "{masked}",
      "tid": "{masked}",
      "uti": "{masked}",
      "ver": "2.0"
    }.[Signature]
    
        2
  •  1
  •   spottedmahn    6 年前

    ID令牌和访问令牌可以返回显示名称、电子邮件等属性。

    Sample ID Token

    请参见此处的“选择应用程序声明”: Azure Active Directory B2C: Built-in policies

    选择应用程序声明。选择在成功注册或登录体验后发送回应用程序的授权令牌中要返回的声明。例如,选择“显示名称”、“标识提供程序”、“邮政编码”、“用户是新的”和“用户的对象ID”。 select application claims screenshot