Spring Boot OAuth - 同一用户的多个访问令牌

时间:2016-03-10 10:41:27

标签: java spring-security oauth-2.0 spring-boot

当同一用户从不同设备登录时,Spring-OAuth会在access_token表中插入多条记录。应该怎么做才能防止Spring创建多个访问令牌。用户应该能够同时从多个设备登录。

使用2.0.3.RELEASE

3 个答案:

答案 0 :(得分:0)

TokenStore使用AuthenticationKeyGenerator创建一个密钥,用于在商店/数据库中查找访问令牌。默认情况下使用的DefaultAuthenticationKeyGenerator使用用户名,clientId和范围创建密钥。如果它们相同,则返回相同的密钥,这将导致返回相同的访问令牌。创建自己的AuthenticationKeyGenerator并将其注入TokenStore实例。

问题是你想要这样做的原因。用户有多个令牌真的没有坏处。如果要在所有设备上注销用户,请使用用户名ping后端,以便为该用户终止所有令牌。

答案 1 :(得分:0)

我使用了一个建议的here解决方案,并将@Transactional添加到了AuthorizationServerConfiguration的tokenStore()方法中。

添加@Transactional注释允许同一用户从多个客户端登录,但是,从一个客户端注销通常会导致oauth_access_token失效(但并非总是如此!),因此其他客户端也会失效。我还在调查......

为了它的价值,我还将spring-security-oauth2的版本(希望这是你的选择)加速到2.0.9.RELEASE和spring-security-web到3.2.9.RELEASE。

答案 2 :(得分:0)

只是一种解决方法,并且可以处理服务的多个实例。只需先获取令牌,然后找到它即可,否则创建它。

"--no-sandbox","'--disable-dev-shm-usage"

然后注册:

org.openqa.selenium.WebDriverException: unknown error: session deleted because of page crash
from tab crashed