会话与访问令牌+刷新令牌



看起来有多篇博客文章反对在浏览器中存储令牌(严格反对localstorage/sessionStorage/in-memory变量(。建议的唯一方法是使用服务器端会话+HTTPS+httpOnly cookie。那么,下面的方式或多或少可以被认为是一种推荐方式吗?

  1. 使用服务器端会话+HTTPS+httpOnly+SameSite=针对基于浏览器的客户端的严格cookie(只是根本不支持旧浏览器(+仅支持基于应用程序/json的POST/PUT请求
  2. 对移动客户端使用Access令牌+刷新令牌+PKCE

这几乎是最佳实践状态:

  • 浏览器客户端无法安全存储令牌,因此使用最新的SameSite=strictHTTP专用cookie。如果使用服务器已知的密钥对这些令牌进行强加密,则这些令牌可以包含令牌。

  • 移动客户端无法轻松使用cookie,但可以使用加密的安全存储来保存令牌。还要使用AppAuth模式,并考虑使用任何恶意应用程序都不能滥用的https重定向URI。

  • API接收JWT访问令牌,并在每次请求时对其进行验证。请注意,反向代理可以位于API前面,以管理解密接收到的cookie并将其转发到API,如本文所述。

当然,您应该理解这些建议背后的原因。Curity有一些文章提供了进一步的信息,以备不时之需:

  • SPA最佳实践
  • 移动最佳实践
  • API最佳实践

另请参阅指南,因为正确实现流和使用好的库也是重要因素。

最新更新