从oauth2 JDBCTokenStore反序列化标记字段

时间:2016-06-06 08:02:35

标签: java spring postgresql spring-security-oauth2

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

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

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

enter image description here

这是来自我们的spring java app

的access_token

enter image description here

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

1 个答案:

答案 0 :(得分:2)

你弄错了。 token_id是spring oauth2 config创建的实际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