我已将JDBCTokenStore用作我的oauth2身份验证令牌的主要令牌存储。通常,当请求通过我们的Spring Java应用程序发出时,我们可以轻松地将令牌解析为它的access_token字符串形式,因为我们使用的是Spring。
当另一个应用程序正在访问oauth访问令牌令牌字段时,问题就在于此。他们似乎无法将BLOB / bytea标记字段转换为String并使用字符串进行比较。
所以这里的访问令牌存储为bytea令牌
这是来自我们的spring java app
的access_token我们如何将bytea令牌转换为Postgres的字符串形式?
答案 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