【发布时间】:2017-10-27 09:14:44
【问题描述】:
所以,我已经使用 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,无法发出新令牌。
我应该怎么做才能使刷新令牌起作用?
【问题讨论】:
标签: spring spring-security jwt spring-security-oauth2