Auth服务器上的Oauth2哈希令牌

时间:2017-03-24 14:59:24

标签: spring spring-security oauth oauth-2.0 spring-security-oauth2

我正在使用Spring Security Oauth2实现Auth服务器。我注意到当spring安全性保存访问令牌(使用JdbcTokenStore)时,OAuth2AccessToken被序列化,这意味着访问令牌是self被保存为纯文本。我对此有几个问题。

1。)使用访问令牌值永远不会实际检索令牌。使用令牌ID检索它。那是为什么?

2。)哈希这个令牌是否可以,因为永远不会使用它来检索它?

3.。)我们真的需要生成令牌ID吗?我们是否可以将额外信息从资源服务器传递到身份验证服务器以检索令牌并根据哈希值对其进行验证?

1 个答案:

答案 0 :(得分:0)

默认情况下,Spring以纯文本格式存储令牌。如果您在同一浏览器中再次请求获取令牌,则会注意到Spring将返回相同的令牌,只要它仍然有效。

1)这不完全正确。在资源服务器上,从标头中读取令牌,并创建PreAuthenticatedAuthenticationToken。通过几个步骤,令牌值用于创建OAuth2Authentication。密钥是一个中间步骤,但只有在您将令牌解析为OAuth2AccessToken之后(请参阅TokenStore.readAccessToken()

2)我个人会在将令牌存储到数据库之前对其进行哈希处理!但是,这需要您实现/扩展TokenStore,因为您需要覆盖TokenStore.storeAccessToken()以保存散列值,并TokenStore.readAccessToken()来散列传入令牌并在数据库中查找散列。

3)通常,身份验证服务器和资源服务器读取相同的数据库,最终都会识别出标识用户的OAuth2Authentication。如果你想哈希,你只需要实现如上所述的存储/读取方法。

我已经使用SpringOauth2在1½之前实现了这样的解决方案,因此散列令牌和刷新令牌是不可能的。在我们的例子中,我们最终没有使用Spring Oauth2的资源服务器实现,因为我们每分钟获得20K请求,并且我们希望延迟解析令牌直到请求被验证,并使用多层缓存来避免命中数据库在每一个请求上。