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

时间:2018-03-23 12:27:24

标签: javascript microsoft-graph azure-ad-b2c msal

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

但是,我注意到我可以使用2个潜在的端点

  1. https://outlook.office.com/api/v2.0/me
  2. https://graph.microsoft.com/v1.0/me
  3. 1,在bell for hapijs中使用,并记录在Use the Outlook REST API中。但是,在钟声中,我似乎无法弄清楚我需要scope才能让它适用于OAuth 2.0。我已经尝试了openidemailprofileMail.Read(只是尝试了这个,因为我已经在某些文档中看到了它),{{1但是,前3个范围不会根据JavaScript OAuth2 flow for Azure AD v2 login does not give an access_token回复User.Read,最后2个(access_tokenMail.Read)会给我一个User.Read,但在使用access_token致电https://outlook.office.com/api/v2.0/me时,他们会向我提供身份验证问题。

    我在Microsoft Graph: Get user找到了2的端点,它似乎适用于Authorization: 'Bearer [access_token]范围。我使用返回的User.Read得到以下回复:

    access_token

    此处的回复问题是没有明确的电子邮件字段,但我想我可以just use userPrincipalName{ '@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 } 也用于bell Azure AD provider

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

2 个答案:

答案 0 :(得分:2)

您绝对应该使用Microsoft Graph,/v1.0/me端点是检索用户个人资料信息的正确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必须包含openidprofileemail(例如&scope=openid profile email user.read)。
  3. 启用后,您将在名为id_token的访问令牌响应中收到其他属性。此属性包含一个JSON Web令牌(JWT),您可以解码以获取用户的配置文件信息:

    作为示例,我使用上面的设置从我的测试Azure AD实例请求令牌。我拿了那个令牌并对其进行了解码(我使用http://jwt.ms/但JWT解码器可以工作)来获取OpenID Connect配置文件:

    {
      "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]
    

答案 1 :(得分:0)

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

Sample ID Token

请参阅此处的“选择申请声明”:Azure Active Directory B2C: Built-in policies

  

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