所以,我已经使用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
表的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
,那么它可以正常工作,但是该表包含N个令牌行而不是1,并且由于IncorrectResultSizeDataAccessException
而无法发布新令牌。
如何使刷新令牌工作?
答案 0 :(得分:0)
我用JwtTokenStore而不是JdbcTokenStore解决了这个“问题”。 JWT令牌应该是无状态的,但我将它们存储在数据库中,这导致了问题。