Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 身份验证服务器上的Oauth2哈希令牌_Spring_Spring Security_Oauth_Oauth 2.0_Spring Security Oauth2 - Fatal编程技术网

Spring 身份验证服务器上的Oauth2哈希令牌

Spring 身份验证服务器上的Oauth2哈希令牌,spring,spring-security,oauth,oauth-2.0,spring-security-oauth2,Spring,Spring Security,Oauth,Oauth 2.0,Spring Security Oauth2,我正在使用SpringSecurityOAuth2实现一个身份验证服务器。我注意到的是,当spring security保存访问令牌(使用JdbcTokenStore)时,OAuth2AccessToken被序列化,这意味着访问令牌本身被保存为纯文本。我有几个问题要问 1.)从未使用访问令牌值实际检索令牌。它是使用令牌id检索的。这是为什么 2.)由于从未使用该令牌的值检索该令牌,因此对其进行哈希处理可以吗 3.)我们确实需要生成令牌id吗?我们是否可以将额外的信息从资源服务器传递到身份验证服务

我正在使用SpringSecurityOAuth2实现一个身份验证服务器。我注意到的是,当spring security保存访问令牌(使用
JdbcTokenStore
)时,
OAuth2AccessToken
被序列化,这意味着访问令牌本身被保存为纯文本。我有几个问题要问

1.)从未使用访问令牌值实际检索令牌。它是使用令牌id检索的。这是为什么

2.)由于从未使用该令牌的值检索该令牌,因此对其进行哈希处理可以吗


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

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

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

2) 就我个人而言,我会在将令牌存储到数据库之前对其进行散列!但是,这确实需要您实现/扩展令牌存储,因为您需要重写
令牌存储.storeAccessToken()
以保存散列值,以及
令牌存储.readAccessToken()
以散列传入令牌并在数据库中查找散列

3) 通常,身份验证服务器和资源服务器读取同一个数据库,并且都以标识用户的OAuth2Authentication结束。如果想要散列,只需实现上述存储/读取方法


我在1½年前用Spring Oauth2实现了类似的解决方案,因此哈希令牌和刷新令牌是完全可能的。在我们的例子中,我们最终没有使用Spring Oauth2的资源服务器实现,因为我们每分钟收到20K个请求,我们希望延迟解析令牌,直到请求得到验证,并使用几层缓存来避免每次请求都命中数据库。

在您的解决方案中,是否使用单向哈希?如果是这样,您是如何检索令牌的?哈希始终是一种方法,其原理与普通密码哈希相同。给客户端未清除的令牌,当在请求中收到未清除的令牌时,对其进行散列,并检查是否有具有相同值的未过期散列。如果使用UUID作为令牌,则不需要使用salt,并且可以使用单个sha-256散列,因为UUID的entropi远大于常规密码。