我試圖找到一種方式來撤銷的oauth2 JWT刷新令牌香草春季實施和JwtTokenStore。撤銷JWT的OAuth2刷新令牌
第一:有人可以證實,沒有任何類似於/ OAuth的/令牌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"}
我的第二個問題是這樣的是撤銷刷新令牌的正確方法?
編輯:我發現表明,ApprovalStore確實撤銷JWT令牌的方式following thread。我現在只需要瞭解如何正確使用它們。
TokenApprovalStore並沒有真正讓你撤消刷新令牌。至少與JWTTokenStore沒有關係。 JWTTokenStore.removeRefreshToken調用tokenStore.revokeApprovals。而這個方法又調用tokenStore.findTokensByClientIdAndUserName,它總是在JWTTokenStore的情況下返回一個空集。 – Klaus
是的,你是對的,但概念是相同的,使用'ApprovalStore'和實施是由你 – MangEngkus
如果我理解正確的審批程序,撤銷批准意味着客戶端應用程序不再授權「使用」該帳戶,因此用戶/客戶端的所有訪問權限和刷新令牌都將被拒絕。但是,如果您想要撤銷單個刷新令牌,那麼這不是太嚴格嗎?撤銷批准意味着用戶不能再做任何事情。此外,只要稍後用戶再次批准客戶端,所有訪問和刷新令牌都可以再次使用。沒有辦法以不妨礙其他訪問和刷新標記的方式撤銷刷新令牌嗎? – Tom