Spring Oauth JWT - 刷新令牌

时间:2017-05-26 12:56:10

标签: spring spring-security jwt spring-security-oauth2

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

我可以获得JWT access_tokensrefresh_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而无法发布新令牌。

如何使刷新令牌工作?

1 个答案:

答案 0 :(得分:0)

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