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