是否可以获取正在使用 OAuth2 访问其帐户的用户的电子邮件地址

Is it possible to get an email address of user whose account is being accessed using OAuth2

我使用 OAuth2 身份验证来访问用户使用 IMAP 发送到 Gmail(和 Hotmail)的邮件。 为此,我实施了以下步骤:

  1. 提示用户电子邮件地址。
  2. 生成授权url并在嵌入式浏览器中打开。
  3. Gmail 要求用户提供电子邮件地址和密码,以及我的申请所需的权限。
  4. 获取访问令牌和刷新令牌。
  5. 使用在第 1 步中获得的电子邮件地址和在第 4 步中获得的访问令牌形成不记名令牌。
  6. 然后我使用 AUTHENTICATE XOAUTH2% bearer_token% 来访问用户的邮件。

这很好用。但我不喜欢用户必须在第 1 步和第 3 步中输入两次电子邮件地址。事实上,用户可以在第 1 步和第 3 步输入不同的电子邮件地址,因此我在第 6 步收到 "Invalid credentials"。

所以问题是:是否有可能获得帐户被访问的用户的电子邮件地址?然后我可以跳过步骤1.

使用 Google Identity Plateform,您可以通过向授权请求添加 "openid" 和 "email" 范围来验证用户(请参阅 this page)。 当您收到访问令牌时,您还将收到一个包含用户电子邮件的 ID 令牌。

使用这些范围,您可以摆脱第 1 步,并在第 4 步检索电子邮件 "Get access token, ID token, and the refresh token." 验证 ID 令牌的详细信息是 on this page

正如@Spomky 所写,对于 Google 我们可以使用额外的作用域 "email" 来获取 id 令牌并从中提取电子邮件地址。

对于 Hotmail(Live.com) 我们可以在第 4 步之后进行额外的请求: 获取 https://apis.live.net/v5.0/me?access_token=ACCESS_TOKEN