获取Microsoft用户的电子邮件地址

时间:2017-11-21 07:10:00

标签: passport.js microsoft-graph azure-ad-graph-api microsoft-account

我想在我的mean-stack应用程序中添加一个login with Microsoft按钮。所以我使用passport-microsoft

使用passport.authenticate('microsoft', { scope: ['User.Read'] }),我可以获得以下信息:@odata.contextgivenNamesurnamedisplayName id,{{1} },userPrincipalNamebusinessPhonesjobTitlemailmobilePhoneofficeLocation。对我而言,我的preferredLanguage是一个电子邮件地址,而我的userPrincipalNamemail

我已按如下方式设置应用程序,但如果我写null,则身份验证会给我一个“无效范围”错误。

enter image description here

有谁知道如何设置我的应用程序并请求获取用户的电子邮件地址?

1 个答案:

答案 0 :(得分:0)

如果你看the documentation for the user object,你会发现以下内容:

  

邮件

     
    

字符串

         

用户的SMTP地址,例如,     " jeff@contoso.onmicrosoft.com" ;.只读。支持$ filter。

  

  

<强>的UserPrincipalName

     
    

字符串

         

用户的用户主体名称(UPN)。 UPN是一个     基于Internet标准的用户的Internet样式登录名     RFC 822. 按照惯例,这应该映射到用户的电子邮件名称。     一般格式是别名@ domain,其中domain必须存在于     租户的已验证域名集合。此属性是必需的     创建用户时租户的经过验证的域名可以是     从组织的verifiedDomains属性访问。支持     $ filter和$ orderby。

  

因此,mail属性似乎不一定代表用户的电子邮件地址,但专门用于Outlook和Office 365.在创建用户时,它也不是必需的属性。相反,您应该依赖userPrincipalName作为用户的电子邮件。

至于您对范围的错误,您应该共享完整的错误消息。