如何使用 Spring Security 5 OAuth2 客户端和 RestTemplate

Spring Security 5.1.0.M2(发行说明)添加了使用时自动刷新令牌的支持WebClient。但是,我正在使用RestTemplate. 是否有类似的机制RestTemplate或我是否需要自己实现该行为?

OAuth2RestTemplate类看起来很有希望,但它从单独的Spring Security的OAuth模块的,我想如果可能使用普通的Spring Security 5.1的客户端上。


一只萌萌小番薯
浏览 336回答 2
2回答

开满天机

OAuth2RestTemplate将自动刷新令牌。RestTemplate不会(刷新令牌是 OAuth2 规范的一部分,因此 OAuth2RestTemplate.您有 2 个选择:使用 Spring Security OAuth2 模块,一切都会开箱即用(Spring 提供的配置属性)基于 Spring 的 OAuth2RestTemplate 创建你自己的 RestTemplateSpring 的 OAuth2 模块将来会集成到 Spring Security 中。我会选择选项 1。

慕桂英4014372

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自动调用的方法,如果有人知道如何做到这一点 - 请分享。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java