gpt4 book ai didi

spring - 将 JdbcTokenStore 用于 JWT

转载 作者:行者123 更新时间:2023-12-05 08:41:47 25 4
gpt4 key购买 nike

对于我的 REST API,我使用 JWT 进行 OAuth2 授权。目前,我正在扩展 JwtTokenStore 以将刷新 token 存储在内存中,以便我能够撤销它们。

// 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);
}
}

我想开始将这些刷新 token 存储在数据库中而不是内存中。 Spring 为我们提供了 JdbcTokenStore,但如果我扩展该类,则无法在构造函数中设置 JwtAccessTokenConverter。我知道我可以只实现我自己的保存/检索 JWT 的方法,但我想利用 https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/test/resources/schema.sql 上对模式的开箱即用支持。 JdbcTokenStore 提供。

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 token 是无关紧要的,因为 JWT token 是自包含的,您需要知道的一切都已在该 token 中可用。

话虽如此,如果您需要持久化它们,那么您将不得不为其编写自定义逻辑。

关于spring - 将 JdbcTokenStore 用于 JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47662950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com