JWT OAuth2令牌是从Spring Auth Server预取的,存储在Redis存储中。
我不想在OAuth2RestTemplate
中请求访问令牌,我想将JWT令牌用于请求。
我可以使用OAuth2RestTemplate
执行此操作,还是应该使用常规RestTemplate
?
答案 0 :(得分:3)
spring-security-oauth的文档在这里很有用,基本上是两个部分:JWT令牌和访问受保护资源:
JWT代币
要使用JWT令牌,您需要在授权中使用JwtTokenStore 服务器。资源服务器还需要能够解码令牌 所以JwtTokenStore依赖于JwtAccessTokenConverter, 并且授权服务器需要相同的实现 和资源服务器。默认情况下会对签名进行签名 资源服务器还必须能够验证签名,所以它 要么需要与授权相同的对称(签名)密钥 服务器(共享密钥或对称密钥),或者它需要公钥 (验证者密钥)匹配中的私钥(签名密钥) 授权服务器(公共 - 私有或非对称密钥)。公众 密钥(如果可用)由授权服务器公开 / oauth / token_key端点,默认情况下使用访问规则是安全的 " denyAll()&#34 ;.您可以通过注入标准SpEL来打开它 表达到AuthorizationServerSecurityConfigurer(例如 " permitAll()"可能是足够的,因为它是一个公钥。)
要使用JwtTokenStore,你需要" spring-security-jwt"在你的 classpath(您可以在与Spring相同的github存储库中找到它 OAuth但具有不同的发布周期。)
访问受保护资源
一旦您提供了资源的所有配置,您就可以 现在访问这些资源。建议的访问方法 资源是通过使用Spring 3. OAuth中引入的RestTemplate实现的 对于Spring Security,它提供了RestTemplate的扩展 只需要提供一个实例 OAuth2ProtectedResourceDetails。
这对我来说基本上意味着您将在授权服务器和资源服务器中使用相同的spring-security-jwt JwtAccessTokenConverter类,并且每个中的令牌服务都需要使用JwtTokenStore()进行设置。他们所指的RestTemplate类的扩展名是spring-security-oauth2中的OAuth2RestTemplate。您可以在资源服务器中使用它,它的JWT智能由等效的令牌识别器提供。
因为spring-security-oauth2代码已经设置为处理JWT令牌,所以你只需要提供一些关键部分,让框架重新检查令牌并将安全性放入每个受保护的范围内。资源。
正如它会发生的那样,有人发布了一个很好的例子,详细说明:baeldung spring-security-oauth-jwt example和这里:github project of the same包括如何提供更加个性化的JWT(声明/有效载荷) )。