バニラスプリング実装とJwtTokenStoreでOauth2 JWTリフレッシュトークンを取り消す方法を探しています。JWT Oauth2リフレッシュトークンを取り消します
最初に、/ oauth/tokenに似たAPIがないため、リフレッシュトークンを取り消すことができますか?
OAuth2RefreshToken oauth2RefreshToken=tokenStore.readRefreshToken(refreshToken);
tokenStore.removeRefreshToken(oauth2RefreshToken);
は今、JwtTokenStoreを見て、私はそれがApprovalStoreを使用していることに気づい:
は、私はfolowing線に沿ってリフレッシュトークンを削除しますカスタムAPIを追加したいです。そこで、私は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"}
私の2番目の質問は、リフレッシュトークンを取り消すための適切な方法は何であるかようですか?
編集:承認ストアが確かにJWTトークンを取り消す方法であることを示唆するfollowing threadが見つかりました。私はちょうどそれらを適切に使用する方法を見つける必要があります。
TokenApprovalStoreで使用されていました。少なくともJWTTokenStoreではそうではありません。 JWTTokenStore.removeRefreshTokenはtokenStore.revokeApprovalsを呼び出します。また、このメソッドはtokenStore.findTokensByClientIdAndUserNameを呼び出します。これは、JWTTokenStoreの場合は常に空のセットを返します。 – Klaus
はい、あなたは正しいですが、コンセプトは同じです。承認ストアを使用して実装があなた次第です – MangEngkus
承認プロセスを正しく理解している場合、承認を取り消すということは、クライアントアプリケーションが "使用"したがって、ユーザー/クライアントのすべてのアクセストークンとリフレッシュトークンは拒否されます。しかし、あなたが望むのは、単一のリフレッシュトークンを取り消すことだけであるならば、それほど厳密ではないでしょうか?承認を取り消すと、ユーザーはもう何もできません。さらに、後でユーザーがクライアントを再び承認するとすぐに、すべてのアクセストークンとリフレッシュトークンを再度使用できます。他のアクセスやトークンを更新しないようにリフレッシュトークンを取り消す方法はありませんか?私が間違っている場合 – Tom