为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只萌萌小番薯 2021-10-13 17:18:27
Spring Security 5.1.0.M2(发行说明)添加了使用时自动刷新令牌的支持WebClient。但是,我正在使用RestTemplate. 是否有类似的机制RestTemplate或我是否需要自己实现该行为?本OAuth2RestTemplate类看起来很有希望,但它从单独的Spring Security的OAuth模块的,我想如果可能使用普通的Spring Security 5.1的客户端上。
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

OAuth2RestTemplate将自动刷新令牌。RestTemplate不会(刷新令牌是 OAuth2 规范的一部分,因此 OAuth2RestTemplate.

您有 2 个选择:

  1. 使用 Spring Security OAuth2 模块,一切都会开箱即用(Spring 提供的配置属性)

  2. 基于 Spring 的 OAuth2RestTemplate 创建你自己的 RestTemplate

Spring 的 OAuth2 模块将来会集成到 Spring Security 中。我会选择选项 1。


查看完整回答
反对 回复 2021-10-13
?
慕桂英4014372

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自动调用的方法,如果有人知道如何做到这一点 - 请分享。


查看完整回答
反对 回复 2021-10-13
  • 2 回答
  • 0 关注
  • 335 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信