从 oauth2 JDBCTokenStore 反序列化令牌字段

Deserializing token field from oauth2 JDBCTokenStore

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

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

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

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

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

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

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

如果您希望其他应用程序 translate/decode 将其恢复为常规字符串形式。你必须使用它。

   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