【问题标题】:Deserializing token field from oauth2 JDBCTokenStore从 oauth2 JDBCTokenStore 反序列化令牌字段
【发布时间】:2016-06-06 08:02:35
【问题描述】:

我使用JDBCTokenStore作为我的主要令牌存储来存储我的 oauth2 身份验证令牌。通常,当请求来自我们的 Spring Java 应用程序时,我们可以轻松地将令牌解析为它的 access_token 字符串形式,因为我们使用的是 Spring。

问题出在另一个应用程序正在访问 oauth 访问令牌令牌字段时。他们似乎无法将 BLOB/bytea 令牌字段转换为字符串并使用该字符串进行比较。

所以这里的访问令牌存储为 bytea 令牌

这是来自我们的 spring java 应用程序的 access_token

我们如何将 bytea 令牌从 Postgres 转换为字符串形式?

【问题讨论】:

    标签: java spring postgresql spring-security-oauth2


    【解决方案1】:

    你错了。 token_id 是 spring oauth2 配置创建的实际 access_token。在将 token_id 存储到持久存储(例如 Postgresql)之前,生成的 token_id 会通过 MD5 进行消化。可以在这里找到。

    您始终可以使用来自 postgresql 的 encode。但是我非常怀疑您是否可以轻松解析

    如果您希望其他应用程序将其翻译/解码回其常规字符串形式。你必须使用它。

       String token_id =  "ceb589c0-8a01-4513-96d9-6ed10d6f8c77";
    
            MessageDigest digest;
            try {
                digest = MessageDigest.getInstance("MD5");
            }
            catch (NoSuchAlgorithmException e) {
                throw new IllegalStateException("MD5 algorithm not available.  Fatal (should be in the JDK).");
            }
    
            try {
                byte[] bytes = digest.digest(token_id.getBytes("UTF-8"));
                System.out.println(String.format("%032x", new BigInteger(1, bytes))) ;
            }
            catch (UnsupportedEncodingException e) {
                throw new IllegalStateException("UTF-8 encoding not available.  Fatal (should be in the JDK).");
            }
    

    话虽如此。您必须让其他应用程序使用某种方法才能将其转换回您从 Spring oauth2 收到的 access_token

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 1970-01-01
      • 2020-12-12
      • 2011-10-01
      • 2011-09-20
      • 2011-11-22
      • 1970-01-01
      • 2020-09-23
      • 2019-03-06
      相关资源
      最近更新 更多