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 令牌应该是无状态的,但我将它们存储在数据库中,这导致了问题。
因此,我已经使用 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:
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 令牌应该是无状态的,但我将它们存储在数据库中,这导致了问题。