SPA和刷新令牌

问题描述:

我正在创建Angular单页应用程序,并且我想使用JWT(JSON Web令牌)和OAUTH 2.0。我正在阅读最佳做法,并发现OAuth 0文章应该帮助它https://auth0.com/docs/api-auth/which-oauth-flow-to-useSPA和刷新令牌

我的应用程序应该能够登录用户并保持登录60天。我知道在浏览器中存储访问令牌60天并不是非常安全,建议让它短暂存在。所以我在考虑使用Refresh Token并将其存储在HttpOnly Secure Cookie中,以便不允许从客户端Javascript读取它,但是在这篇auth0文章中,他们说这是非常不安全的,SPA不应该使用Refresh令牌,但它们没有描述办法?如果我的auth API代码交换端点在JSON响应中返回access_token,但在HttpOnly Cookie中返回refresh_token,会怎么样?这样我就不需要公开任何系统密钥,因为它们存储在auth后端API中。

有人可以提供更多的信息,并告诉它是安全的存储刷新令牌在HttpOnly安全Cookie?

SPA应用程序使用OAuth2隐式流程,并且此流程没有刷新令牌,因为公共客户端应用程序无法安全地存储系统密码。我建议实施OpenID Connect隐式流程并将JWT令牌存储在本地存储中。此令牌更安全,不能被任何其他应用程序使用。您还可以加密令牌以保护敏感信息。如果您正在寻找更多的信息,请访问一个简短的链接文章https://www.linkedin.com/pulse/microservices-security-openid-connect-manish-singh

+0

但是,如果我的代码交换端点在JSON响应中返回访问令牌但在HttpOnly Cookie中刷新令牌会怎么样?我不需要公开任何系统密码,因为它存储在我的后端auth API中。 –

+0

看起来您正在使用API​​网关或类似的API来设置安全Cookie响应中的刷新令牌。从http安全角度来看,仅将cookie存储在http cookie中是安全的。但是我认为如果你在使用RT的JSON响应中获得AT并且没有使用任何其他安全性,那么你的实现很容易受到CSRF攻击。 – ManishSingh

+0

我已阅读您提供的关于OpenID的文章,并且我正在使用一些代理API将所有私钥存储在后端,谢谢:) –

除了使用OpenID Connect的答案表单@ManishSingh,您应该使用PKCE而不需要客户机密。