提问者:小点点

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


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

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

 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的WebSecurityConfigrerAdapter


共1个答案

匿名用户

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

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

这应该会给你一个这样的回答:

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