我们在spring oauth面临一个问题重复访问令牌,我们通过扩展DefaultTokenServices来放置同步令牌服务,但它没有解决。 我们使用Oauth版本:oauth2:1.0.0 春季版:3.2.5。
参考图像:数据如何存储在后端。
答案 0 :(得分:1)
我们遇到了同样的问题。我通过将表authentication_id
中的oauth_access_token
设置为primary来解决此问题。
org.springframework.security.oauth2.provider.token.DefaultTokenServices#refreshAccessToken中存在竞争条件,导致表oauth_access_token中的条目具有重复的authentication_id(即使在2.0.5之后)。当两个线程同时访问数据库但两者仍然获得旧刷新令牌(tokenStore.readAuthenticationForRefreshToken(refreshToken))的身份验证时,会发生这种情况。
create table oauth_access_token (
token_id VARCHAR(256),
token LONGVARBINARY,
authentication_id VARCHAR(256) PRIMARY KEY,
user_name VARCHAR(256),
client_id VARCHAR(256),
authentication LONGVARBINARY,
refresh_token VARCHAR(256)
);