代码之家  ›  专栏  ›  技术社区  ›  Dave

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

  •  0
  • Dave  · 技术社区  · 6 年前

    当用户通过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的Web安全配置适配器

    1 回复  |  直到 6 年前
        1
  •  1
  •   payne    6 年前

    如果用户的电子邮件地址尚未在 id_token 作为oauth2响应的一部分,您可以使用Gmail API Users.getProfile

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

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

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