1

我想在login with Microsoft我的平均堆栈应用程序中添加一个按钮。所以我正在使用passport-microsoft

通过使用passport.authenticate('microsoft', { scope: ['User.Read'] }),我可以获得这些信息:@odata.context, givenName, surname, displayName id, userPrincipalName, businessPhones, jobTitle, mail, mobilePhone, officeLocation, preferredLanguage. 对我来说, myuserPrincipalName是一个电子邮件地址,而 mymailnull.

我已经按如下方式设置了应用程序,但是如果我写passport.authenticate('microsoft', { scope: ['User.Read', 'email'] }),身份验证给了我一个“无效范围”错误。

在此处输入图像描述

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

4

1 回答 1

1

如果您查看object的文档user,您会发现以下内容:

邮件

细绳

用户的 SMTP 地址,例如“jeff@contoso.onmicrosoft.com”。只读。支持$过滤器。

用户主体名称

细绳

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

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

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

于 2017-11-21T08:55:22.170 回答