如何跟踪具有访问令牌的用户是否仍具有有效会话?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何跟踪具有访问令牌的用户是否仍具有有效会话?相关的知识,希望对你有一定的参考价值。

我是OIDC和会话管理的新手,并且想知道在使用隐式流或授权代码流登录到站点后,确保用户会话有效的建议方法。

例如,假设用户登录mysite.com并在此过程中获得访问令牌。令牌可以保存,例如在仅HTTP的cookie中。

mysite.com是否应该轮询OpenId提供程序(OP)以在每次向受保护资源发出请求时检查用户的会话状态(即使未从OP检索该资源)以确保用户没有例如手动修改了访问令牌cookie?或者,在成功进行OIDC身份验证后,mysite.com是否应该盲目信任用户的令牌cookie?

我想一种可能性是将用户的会话状态存储到数据库中,但这对于一个简单的问题来说似乎是一个相当重的解决方案。

有关最佳实践的建议吗?

答案

OpenID Connect Session Management 1.0草案规范中描述了最佳实践。

首先,您需要避免在最终用户设备和OP之间产生过多的网络流量。这对移动设备尤为重要。因此,草案规范不是重复身份验证请求,而是提供了一种更好的方法来使用OP池化最终用户会话的状态:在服务的网页中向OP插入隐藏的iframe。这样,该OP iframe将通过会话cookie维持与OP的会话,而无需验证用户。因此,您可以使用交叉iframe消息轮询此iframe,以定期检查与OP的会话是否处于活动状态。这样,就不会有任何认证流程来检查与OP的会话是否处于活动状态。

您将在草案规范中找到其他技巧,例如使用OP中ID令牌中的到期日期。

如规范中所述,最终用户可能在到期日之前已经退出OP。因此,非常希望能够在OP处找出最终用户的登录状态。这是最佳做法。但是许多SP不会使用OP检查最终用户会话状态。他们只管理自己的会话,例如在一些不活动期后删除。当发生这样的事件时,他们将最终用户转发到OP处的认证入口点,以发起新的经认证的会话。

当与OP的会话已关闭时,许多SP不会选择关闭与SP的会话。从OP的角度来看,与OP的会话可能持续很长时间不会帮助SP维持其会话,而是避免最终用户在连接到另一个SP时再次进行身份验证。当一组SP协同工作以提供无缝的用户体验时,这一点尤其重要,其中用户被透明地从一个SP重定向到另一个SP。

以上是关于如何跟踪具有访问令牌的用户是否仍具有有效会话?的主要内容,如果未能解决你的问题,请参考以下文章

是否有必要在服务器端开发具有会话令牌控制的 iPhone Native App?

JWT基于角色的访问控制

微服务授权。如何防止具有有效 JWT 的用户访问其他用户的资源?

如何在资源请求上重新生成刷新令牌和访问令牌?

在哪里存储访问令牌以及如何跟踪用户(在 Http only cookie 中使用 JWT 令牌)

请求具有无效的身份验证凭据。预期的 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据 automl