我试图找到一种方法来撤销Oauth2 JWT刷新令牌与vanilla Spring实现和JwtTokenStore .
首先:有人可以确认没有类似于/ oauth / token的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令牌的方式 . 我现在只需要找出如何正确使用它们 .
1 回答
Confirmed .
你不需要定义
JwtTokenStore
bean,spring会使用AuthorizationServerEndpointsConfigurer为你创建它撤销对令牌的批准,这被JwtTokenStore使用