我们使用spring security OAuth2来保护REST服务 . 应用程序可以调用 /oauth/authorize
, /oauth/token
或 /rest-api
endpoints . token和rest-api endpoints 是无状态的,不需要会话 .
用户通过身份验证后,我们可以使会话无效吗?如果是这样,最好的方法是什么 . 我们希望用户在每次调用 /oauth/authorize
时都能登录 . 目前,只要会话存在,对 /oauth/authorize
的调用就会跳过身份验证 .
3 回答
根据我的理解,您正在尝试以某种方式执行某些操作后以编程方式注销 . 可能你应该查看SecurityContextLogoutHandler并看看它是如何工作的 . 有一种注销方法 . 我认为将其作为建议将解决您的问题 .
理解这个问题有点老了,我希望以下内容可以帮助那些寻找问题正确答案的人
OP没有询问令牌失效,而是如何在用户身份验证成功通过后立即使Spring OSuth2服务器上的httpSession无效,并将有效的access_token或authorization_code(后续获取access_token)返回给客户端 .
对于这个用例,仍然没有开箱即用的解决方案 . 但是,最活跃的spring-security-oauth撰稿人Dave Syer的工作方法可以找到here on GitHub
只需从那里复制代码:
添加pom.xml
Another solution 可以将会话时间设置为某个非常小的值 . 实现这一目标的最简单方法是将以下内容放到application.yml config中:
但它不是理想的解决方案,因为最小值可能是提供者为1(零被保留用于无限会话)并且它在几分钟内不是几秒钟
首先:在您的配置中声明bean,其中包含oauth的令牌存储
对于控制器方法,我们进行了以下课程
如果你没有使用这种方法,你可以获取当前用户的令牌自动装配
Principal
:甚至自动装配
OAuth2Authentication
: