REST APIには、OAuth2認証にJWTを使用しています。現在JwtTokenStore
、更新トークンをメモリに保存して、それらを取り消すことができるように拡張しています。
// TODO: This is a temporary in memory solution that needs to be replaced with a concrete persistent implementation.
public class MyJwtTokenStore extends JwtTokenStore {
private List<OAuth2RefreshToken> refreshTokens;
public MyJwtTokenStore(JwtAccessTokenConverter jwtTokenEnhancer) {
super(jwtTokenEnhancer);
refreshTokens = new ArrayList<>();
}
@Override
public OAuth2RefreshToken readRefreshToken(String tokenValue) {
OAuth2RefreshToken refreshToken = super.readRefreshToken(tokenValue);
if (!refreshTokens.contains(refreshToken)) {
throw new InvalidGrantException("Invalid refresh token: " + tokenValue);
}
return refreshToken;
}
@Override
public void storeRefreshToken(OAuth2RefreshToken refreshToken, OAuth2Authentication authentication) {
refreshTokens.add(refreshToken);
}
@Override
public void removeRefreshToken(OAuth2RefreshToken token) {
refreshTokens.remove(token);
}
}
これらの更新トークンをメモリではなくデータベースに保存し始めたいと思います。Springはを提供しますJdbcTokenStore
が、そのクラスを拡張するJwtAccessTokenConverter
と、コンストラクターにを設定できません。JWTを保存/取得する独自の方法を実装できることはわかっていますが、https://github.com/spring-projects/spring-security-でスキーマのすぐに使用できるサポートを利用したいと思います。 OAuthの/ブロブ/マスター/春-セキュリティのOAuth2 / SRC /テスト/リソース/ schema.sqlJdbcTokenStore
提供します。
create table oauth_refresh_token (
token_id VARCHAR(256),
token LONGVARBINARY,
authentication LONGVARBINARY
);
SpringはJWTをデータソースに保存することをサポートしていますか?「JwtJdbcTokenStore」のようなものが必要です。これを実行しながら、事前定義されたクエリと操作を使用するための良い方法は何JdbcTokenStore
ですか?
いいえ、Springはこれをサポートしていません。このスレッドを参照してくださいhttps://github.com/spring-projects/spring-security-oauth/issues/687
JWTトークンは自己完結型であるため、JWTトークンの永続化は関係ありません。知っておく必要のあることはすべて、そのトークンですでに利用可能です。
そうは言っても、それらを永続化する必要がある場合は、同じためのカスタムロジックを作成する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加