【发布时间】:2015-12-13 13:46:37
【问题描述】:
我正在尝试找到一种方法来使用 vanilla Spring 实现和 JwtTokenStore 来撤销 Oauth2 JWT 刷新令牌。
首先:有人可以确认没有类似于 /oauth/token 的 API 可以让我撤销刷新令牌吗?
我想添加一个自定义 API,该 API 将沿以下几行删除刷新令牌:
OAuth2RefreshToken oauth2RefreshToken=tokenStore.readRefreshToken(refreshToken);
tokenStore.removeRefreshToken(oauth2RefreshToken);
现在,查看 JwtTokenStore,我注意到它使用 ApprovalStore。所以我继续为我的 JwtTokenStore 提供了一个 InMemoryApprovalStore。我的 JwtTokenStore 实例化如下所示:
@Bean
protected JwtAccessTokenConverter jwtTokenEnhancer() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setSigningKey("123456");
return converter;
}
@Bean
public JwtTokenStore getTokenStore(){
tokenStore= new JwtTokenStore(jwtTokenEnhancer());
tokenStore.setApprovalStore(new InMemoryApprovalStore());
tokenStore.setTokenEnhancer(jwtTokenEnhancer());
return tokenStore;
};
结果:没有 InMemoryApprovalStore,我可以毫无问题地验证用户和刷新令牌。但是,只要将 InMemoryApprovalStore 添加到令牌存储区,我就会开始收到以下错误消息:
{"error":"invalid_grant","error_description":"Invalid refresh token: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NDUwMjQ2MTcsInVzZXJfbmFtZSI6IjYzZjIyYjZlLWU5MGUtNDFjYS1iYzJlLTBmZTgzNmY3MTQ2NyIsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iLCJST0xFX1VTRVIiXSwianRpIjoiMjgwMDgwNWQtMjk1Zi00ZDQzLWI2NTYtMDNlZWYwMWFkMjg0IiwiY2xpZW50X2lkIjoid2ViLWNsaWVudCIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInRydXN0Il19.BPC0HqLYjWGM0IFjvsUGGKQ9dyIXSXwMhraCVFIxD0U"}
因此,我的第二个问题是撤销刷新令牌的正确方法是什么?
编辑:我发现 following thread 表明 ApprovalStore 确实是撤销 JWT 令牌的方法。我现在只需要了解如何正确使用它们。
【问题讨论】:
标签: spring-security oauth-2.0 spring-boot spring-security-oauth2