Spring Oauth JWT - 刷新令牌

Spring Oauth JWT - Refresh Token

因此,我已经使用 JWT 令牌实现了 Spring Oauth2 安全性。

我可以得到 JWT access_tokens 但是 refresh_token 用法是我不完全理解的。我可以使用 refresh_token 来获取新的 access_token 和新的 refresh_token

当我想再次使用新的 refresh_token 时,我收到错误消息,指出此令牌无效。如果我使用旧的 refresh_token 然后我得到异常 DuplicateKeyException, PreparedStatementCallback; SQL [insert into oauth_access_token (token_id, token, authentication_id, user_name, client_id, authentication, refresh_token) values (?, ?, ?, ?, ?, ?, ?)]; ERROR: duplicate key value violates unique constraint "oauth_access_token_pkey"

这是 oauth_access_token table:

的 DDL
CREATE TABLE oauth_access_token (
    token_id varchar(510) NULL DEFAULT NULL::character varying,
    token bytea NULL,
    authentication_id varchar(510) NOT NULL,
    user_name varchar(510) NULL DEFAULT NULL::character varying,
    client_id varchar(510) NULL DEFAULT NULL::character varying,
    authentication bytea NULL,
    refresh_token varchar(510) NULL DEFAULT NULL::character varying,
    CONSTRAINT oauth_access_token_pkey PRIMARY KEY (authentication_id)
)
WITH (
    OIDS=FALSE
);

如果我删除约束 oauth_access_token_pkey 那么它工作正常,但是 table 包含 N 个令牌行,而不是 1,并且由于 IncorrectResultSizeDataAccessException.

我应该怎么做才能使刷新令牌起作用?

我用 JwtTokenStore 而不是 JdbcTokenStore 解决了这个 "issue"。 JWT 令牌应该是无状态的,但我将它们存储在数据库中,这导致了问题。