身份验证-使用令牌处理会话的正确方式



我有一个ReactJS SPA应用程序,它连接到ASP.NET Core WebAPI。由于OpenIddict,API也是一个授权服务器。我正在使用PasswordFlowRefreshTokenFlow来处理身份验证,这意味着服务器返回一个AccessToken和一个可选的RefreshToken。此时此刻,我很难正确处理记住我的功能。当用户想重新注册时,这没什么大不了的——服务器返回一个AccessToken和一个客户端存储的RefreshTokenLocalStorage,所以它可以在AccessToken即将过期或过期时使用RefreshToken刷新它,这很好——网上有很多文章和其他有用的资源。当用户不想被记住时,问题就出现了。在这种情况下,如何处理身份验证?我看到的两种解决方案是:

  • 服务器只发出AccessToken,客户端将其存储在SessionStorage中。如果过期,客户端将强制用户重新输入凭据以获得新的AccessTokenAccessTokens应该是短暂的(根据我目前了解到的情况,它可能从一个小时到几个小时不等,但它的有效时间越长,在被盗的情况下就越不安全。如果它持续一个小时,然后用户仍然使用该应用程序,那么强迫他/她再次登录似乎有点奇怪
  • 服务器返回CCD_ 12和CCD_。在会话期间,如果AccessToken即将到期,则客户端可以使用RefreshToken获得新的CCD_15。这是有风险的,因为服务器永远不会知道用户关闭了他的浏览器,并且他/她的RefreshToken应该被撤销。假设RefreshTokens的寿命要长得多,这似乎真的很危险

如果您对本主题有任何想法、建议和见解,我将不胜感激。非常感谢。

如果你是新手,这东西很难理解,但大多数实现都是这样工作的:

  • SPA通过第三方库使用Open Id Connect隐式流
  • 用户将从SPA重定向到第三方授权服务器进行登录
  • 登录过程完全从您的应用程序中外部化
  • 登录后,授权服务器会向您的SPA返回一个令牌
  • SPA使用访问令牌调用API

PS:我有一个代码示例和一些书面指南,您可能会觉得有用。

进一步的帖子描述了静默令牌续订是如何为SPA工作的,正如John在上面指出的,SPA不使用刷新令牌。

相关内容

  • 没有找到相关文章

最新更新