Office365 API:使用 oauth2 令牌获取当前用户的电子邮件?

Office365 API: get current user email using oauth2 token?

我正在通过 ouath2 在我们的网络应用程序中对 Outlook (office365) 用户进行身份验证。主要是我遵循了这个例子: https://dev.outlook.com/RestGettingStarted/Tutorial/python 。我设法得到了 access_token 的回应;同样来自上面 link 的文章指出,响应应包含 token_id,而后者又将包含编码的用户电子邮件。在我的例子中,使用访问令牌的响应是这样的:

{
u'token_type': u'Bearer', 
u'scope': u'https://outlook.office.com/mail.readwrite', 
u'access_token': u'EwB4Aul3BAA...ZQE=', 
u'expires_in': u'3600'
}

这里显然没有 token_id。我在谷歌上搜索了一些 Office365 API,这将允许使用 access_token 获取用户信息(和电子邮件),但没有成功。

有什么建议吗?

所以,答案很简单:我忘记在请求访问令牌之前将 openid 添加到范围。

我遵循了 https://dev.outlook.com/RestGettingStarted/Tutorial/php

中的 PHP 示例

但是,我无法获取登录用户的电子邮件地址,即使在 openid 范围内也是如此。

经过大约 24 小时的搜索和测试,我最终发现我需要添加 profile 作为范围。我只是通过 OAuth 沙箱 https://oauthplay.azurewebsites.net/ 通过检查请求 headers.

发现了这一点

希望这对某人有所帮助。

这真的应该更好地记录下来。