【问题标题】:Spring Oauth JWT - Refresh TokenSpring Oauth JWT - 刷新令牌
【发布时间】:2017-10-27 09:14:44
【问题描述】:

所以,我已经使用 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,无法发出新令牌。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-01-28
      • 2017-02-08
      • 2016-03-05
      • 2016-06-25
      • 2020-05-05
      • 2021-01-19
      • 1970-01-01
      • 2020-02-17
      • 2021-04-06
      相关资源
      最近更新 更多