Spring OAuth + JWT -- /oauth/token
Posted
技术标签:
【中文标题】Spring OAuth + JWT -- /oauth/token【英文标题】: 【发布时间】:2015-11-10 14:27:14 【问题描述】:我正在尝试使用 https://github.com/spring-projects/spring-security-oauth 将我的 Spring 应用程序配置为使用 JWT。我已经为ConsumerTokenServices
公开了一个由JwtTokenStore
支持的bean,但是点击/oauth/token
并没有给我一个JWT。
$ curl localhost:8643/contextpath/oauth/token?grant_type=client_credentials -u user:password`
"access_token":"a78a6225-78d5-4cb8-9393-6c0b567a6f24","token_type":"bearer","expires_in":5684,"scope":"read write"%
我知道TokenStore
正在被使用,因为点击check_token
会产生错误,而以前不会。
$ curl https://localhost:8643/context/oauth/check_token?token=a78a6225-78d5-4cb8-9393-6c0b567a6f24
"error":"invalid_token","error_description":"Cannot convert access token to JSON"%
如何让我的TokenEndpoint
吐回 JWT?
【问题讨论】:
您是否尝试使用 Spring Boot 1.3 制作示例应用程序?它确实带有对 OAuth2 的自动支持,请参阅 spring.io/blog/2015/11/16/spring-boot-1-3-0-released。我会尝试构建一个示例应用程序,然后查看github.com/spring-projects/spring-boot/blob/master/… 和github.com/dynamind/spring-boot-security-oauth2-minimal。另一个不错的博客系列是spring.io/blog/2015/02/03/… 见github.com/dynamind/spring-boot-security-oauth2-minimal 你能解决这个问题吗? 我最终没有使用 Spring。 【参考方案1】:也许你应该使用spring提供的JwtAccessTokenConverter,然后正确配置。 这是一个例子:
public class YourTokenEnhancer extends JwtAccessTokenConverter
//you can autowire sth for you logic
@Override
public OAuth2AccessToken enhance(OAuth2AccessToken accessToken,
OAuth2Authentication authentication)
DefaultOAuth2AccessToken customAccessToken = new DefaultOAuth2AccessToken(accessToken);
OAuth2AccessToken enhancedToken = super.enhance(customAccessToken, authentication);
return enhancedToken;
而配置是:
@Configuration
@EnableAuthorizationServer
public class OAuth2Config extends AuthorizationServerConfigurerAdapter
//other config...
@Bean
public JwtAccessTokenConverter accessTokenConverter()
JwtAccessTokenConverter converter = new YourTokenEnhancer();
converter.setSigningKey("secret");
return converter;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception
endpoints.authenticationManager(authenticationManager)
.tokenStore(redisTokenStore())
.tokenServices(authorizationServerTokenServices())
.accessTokenConverter(accessTokenConverter())//configure it here
;
【讨论】:
以上是关于Spring OAuth + JWT -- /oauth/token的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security OAuth2 v5:NoSuchBeanDefinitionException:'org.springframework.security.oauth2.jwt.Jwt