用户身份验证的常见方案遵循以下步骤:
access token
和refresh token
access token
将在进一步的请求中发送,如果有效,则服务器以所请求的资源进行响应access token
不再有效时,服务器会请求客户提供refresh token
以发布新的access token
refresh token
,可能会发生两件事:
refresh token
有效,则向客户发布新的access token
要让客户能够在每个请求中发送access token
,该令牌应存储在浏览器存储(本地/会话存储)或 Cookie ,这使得它易受XSS(跨站点脚本)攻击。如果我们将短生命周期设置为access token
,则可以减轻此问题。
然而,我的问题是关于refresh token
。此令牌应该具有较长的生命周期,并且由于我们使用它来获取新的access tokens
,如果攻击者拦截它将是一个问题。因此,在客户端存储此令牌可能不是一个好主意,对吧?
但是,有哪些替代方案?
我们可以将它存储在使用" httpOnly"旗?但这不会使它容易受到CSRF(跨站点请求伪造)攻击吗?
加密令牌并将其保存在浏览器存储上是否安全?
提前谢谢你。最好的问候!
答案 0 :(得分:0)
使其易受XSS(跨站点脚本)攻击。
为了澄清,如果您的网站上存在可能导致此问题的漏洞,则该Cookie仅容易受到XSS攻击。
我们可以将它存储在使用" httpOnly"旗?但不会 这使它容易受到CSRF(跨站点请求伪造)攻击?
虽然httpOnly
标志由于需要在客户端访问而无法在某些形式的CSRF protection中使用,但将Cookie标记为httpOnly
并不会增加风险以任何方式对您的系统 - httpOnly
更具限制性。
加密令牌并将其保存在浏览器存储上是否安全?
不是因为任何可以访问浏览器存储的人都可以访问cookie值并显示它。如果它可以在没有外部密钥的情况下直接使用,那么它采用何种形式(加密或不加密)并不重要。不要太担心这一点 - 请相信浏览器以保证安全,但要确保网站的其余部分尽可能安全。
您认为refresh token比访问令牌更敏感是正确的。您可以将其存储在cookie中,但请确保将其设置为httpOnly
并设置secure
标志,以确保它仅通过加密的HTTPS连接传输。