如何从授权码OAuth2获取电子邮件地址

时间:2018-10-04 17:16:09

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

当用户通过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

1 个答案:

答案 0 :(得分: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-
}