【问题标题】: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