当用户通过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
如果用户的电子邮件地址尚未在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-
}