2 回答
TA贡献1786条经验 获得超13个赞
OAuth2RestTemplate
将自动刷新令牌。RestTemplate
不会(刷新令牌是 OAuth2 规范的一部分,因此 OAuth2RestTemplate.
您有 2 个选择:
使用 Spring Security OAuth2 模块,一切都会开箱即用(Spring 提供的配置属性)
基于 Spring 的 OAuth2RestTemplate 创建你自己的 RestTemplate
Spring 的 OAuth2 模块将来会集成到 Spring Security 中。我会选择选项 1。
TA贡献1871条经验 获得超13个赞
OAuth2RestTemplate应该在RestTemplate需要 JWT 身份验证时使用,而不是使用。您可以设置AccessTokenProvider为它,它将告诉如何检索 JWT 令牌:oAuth2RestTemplate.setAccessTokenProvider(new MyAccessTokenProvider());
在类实现中,AccessTokenProvider您需要实现obtainAccessToken和refreshAccessToken方法。所以在obtainAccessToken方法中可以检查令牌是否过期,如果是 - 令牌通过refreshAccessToken. 示例实现(没有实际令牌检索和刷新的细节):
public class MyAccessTokenProvider implements AccessTokenProvider {
@Override
public OAuth2AccessToken obtainAccessToken(OAuth2ProtectedResourceDetails details, AccessTokenRequest parameters)
throws UserRedirectRequiredException, UserApprovalRequiredException, AccessDeniedException {
if (parameters.getExistingToken() != null && parameters.getExistingToken().isExpired()) {
return refreshAccessToken(details, parameters.getExistingToken().getRefreshToken(), parameters);
}
OAuth2AccessToken retrievedAccessToken = null;
//TODO access token retrieval
return retrievedAccessToken;
}
@Override
public boolean supportsResource(OAuth2ProtectedResourceDetails resource) {
return false;
}
@Override
public OAuth2AccessToken refreshAccessToken(OAuth2ProtectedResourceDetails resource,
OAuth2RefreshToken refreshToken, AccessTokenRequest request)
throws UserRedirectRequiredException {
OAuth2AccessToken refreshedAccessToken = null;
//TODO refresh access token
return refreshedAccessToken;
}
@Override
public boolean supportsRefresh(OAuth2ProtectedResourceDetails resource) {
return true;
}
}
没有找到 SpringrefreshAccessToken自动调用的方法,如果有人知道如何做到这一点 - 请分享。
添加回答
举报