• OAuth 修改access_token的存储位置


    OAuth 修改access_token的存储位置

    OAuth 修改access_token的存储位置,将Redis存储换为JDBC存储。

    背景

    项目需求改变,需要将原本存储在Redis中的access_token变为存储在SQLserver中。

    实施

    做起来也比较简单,只需要将原来的TokenStore实现从RedisStore改为JdbcTkenStore再在DB中创建oauth_access_token表即可

    代码如下:

    @Bean
    public TokenStore tokenStore() {
        return new JdbcTokenStore(dataSource());
    }

    DB脚本如下:

    Mysql:

    create table oauth_access_token (
      token_id VARCHAR(128),
      token BLOB,
      authentication_id VARCHAR(128) PRIMARY KEY,
      user_name VARCHAR(128),
      client_id VARCHAR(128),
      authentication BLOB,
      refresh_token VARCHAR(128)
    );

    SQLServer

    create table oauth_access_token (
      token_id VARCHAR(128),
      token  varbinary(max),
      authentication_id VARCHAR(128) PRIMARY KEY,
      user_name VARCHAR(128),
      client_id VARCHAR(128),
      authentication  varbinary(max),
      refresh_token VARCHAR(128)
    );

     字段解释

    token_id:该字段的值是将access_token的值通过MD5加密后存储的
    
    token:存储将OAuth2AccessToken.java对象序列化后的二进制数据, 是真实的AccessToken的数据值
    
    authentication_id:该字段具有唯一性, 其值是根据当前的username(如果有),client_id与scope通过MD5加密生成的. 具体实现请参考DefaultAuthenticationKeyGenerator.java类
    
    user_name:登录时的用户名, 若客户端没有用户名(如grant_type="client_credentials"),则该值等于client_id
    
    client_id:你懂得
    
    authentication:存储将OAuth2Authentication.java对象序列化后的二进制数据
    
    refresh_token :该字段的值是将refresh_token的值通过MD5加密后存储的

    这里需要特别注意的是BOLB类型与varbinary(max)类型。

    正常的结果为:

  • 相关阅读:
    【Repost】Comparision of B-Tree and LSM Tree
    字符串经典算法 Knuth-Morris-Pratt Boyer-Moore AC(Aho-Corasick)算法 后缀自动机
    【Leetcode 913】【Hard】Cat and Mouse 博弈论
    【转】初探计算机视觉的三个源头、兼谈人工智能
    MySQL--06(索引)
    MySQL--05(子查询&视图)
    MySQL--04(聚合函数&表连接查询)
    MySQL--03(增删改查&主键)
    MySQL--02
    MySQL--01
  • 原文地址:https://www.cnblogs.com/Edward-Wang/p/13386882.html
Copyright © 2020-2023  润新知