【问题标题】:How to get email address from authorization code OAuth2如何从授权码 OAuth2 中获取电子邮件地址
【发布时间】:2019-03-10 04:06:26
【问题描述】:

当用户通过 Oauth2 协议登录 Gmail 帐户并完成它时,我的服务器获得授权码,我将此代码交换为刷新令牌和访问令牌,一切都按计划进行,但我也需要获取电子邮件地址。我的意思是如果用户以 helloworld@gmail.com 登录,不知何故我想知道这个地址的授权码,我可以知道吗?

这是我在访问令牌和刷新令牌上交换授权代码的端点:

 public OAuth2AccessToken oauth(String authorizationCode) {
        AuthorizationCodeResourceDetails resource = new AuthorizationCodeResourceDetails();
        resource.setUserAuthorizationUri(userAuthorizationUri);
        resource.setAccessTokenUri(accessTokenUri);
        resource.setClientId(clientId);
        resource.setClientSecret(clientSecret);
        resource.setPreEstablishedRedirectUri(redirectUrl);
        resource.setScope(scopes);
        resource.setUseCurrentUri(false);

        AccessTokenRequest request = new DefaultAccessTokenRequest();
        request.setPreservedState(new Object());
        request.setAuthorizationCode(authorizationCode);

        AuthorizationCodeAccessTokenProvider provider = new AuthorizationCodeAccessTokenProvider();
        OAuth2AccessToken accessToken = provider.obtainAccessToken(resource, request);

        return accessToken;
    }

我没有用于 OAuth2 的 WebSecurityConfigurerAdapter

【问题讨论】:

  • 您能否添加一些代码来说明您如何将 OAuth2 部分集成到您的 spring-boot 应用程序中?
  • @git-flo 我更新了问题,提供了我如何交换授权码的代码。我从用户登录帐户的 UI 获得的授权码
  • stackoverflow.com/questions/37026981/…也许这个答案可以帮助你

标签: spring-boot oauth-2.0 gmail gmail-api


【解决方案1】:

如果用户的电子邮件地址尚未在 oauth2 响应的 id_token 部分中提供,您可以使用 Gmail API Users.getProfile 操作,使用特殊值“me”作为 userId 来引用经过身份验证的用户.

见:https://developers.google.com/gmail/api/v1/reference/users/getProfile

这应该会给你这样的回应:

{
  "emailAddress": -string-,
  "messagesTotal": -integer-,
  "threadsTotal": -integer-,
  "historyId": -unsigned long-
}

【讨论】:

猜你喜欢
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多