我使用OAuth2身份验证来使用IMAP访问用户的Gmail(和Hotmail)邮件。为此,我实施了以下步骤:
- 提示用户的电子邮件地址
- 生成授权url并在嵌入式浏览器中打开
- Gmail要求用户提供电子邮件地址和密码,以及我的应用程序所需的权限
- 获取访问令牌和刷新令牌
- 使用在步骤1中获得的电子邮件地址和在步骤4中获得的访问令牌形成承载令牌
- 然后我使用AUTHENTICATE XOAUTH2%bear_token%来访问用户的邮件
这很好用。但我不喜欢用户必须输入两次电子邮件地址——第一步和第三步。事实上,用户可以在步骤1和3中输入不同的电子邮件地址,因此我在步骤6中收到"无效凭据"。
所以问题是:有可能获得其帐户被访问的用户的电子邮件地址吗?然后我可以跳过步骤1。
使用Google Identity Plateform,您可以通过在授权请求中添加"openid"one_answers"email"作用域来验证用户(请参阅本页)。当您收到访问令牌时,您还将收到一个包含用户电子邮件的ID令牌。
使用这些作用域,您可以摆脱步骤1。并在步骤4检索电子邮件"获取访问令牌、ID令牌和刷新令牌。"验证ID令牌的详细信息在此页面上
正如@Spomky所写,对于谷歌,我们可以使用额外的作用域"电子邮件"来获取id令牌并从中提取电子邮件地址。
对于Hotmail(Live.com),我们可以在步骤4之后提出其他请求:得到https://apis.live.net/v5.0/me?access_token=ACCESS_TOKEN