Javascript 我在哪里存储刷新令牌和访问令牌,以及如何使用它?
我无法轻松决定如何从后端接收刷新令牌和访问令牌以及将其存储在何处 我理解的认证过程如下Javascript 我在哪里存储刷新令牌和访问令牌,以及如何使用它?,javascript,node.js,cookies,jwt,token,Javascript,Node.js,Cookies,Jwt,Token,我无法轻松决定如何从后端接收刷新令牌和访问令牌以及将其存储在何处 我理解的认证过程如下 XSS可以用cookie进行防御 使用cookie容易受到CSRF的攻击 但是,在cookie的情况下,它可以作为“document.cookie”被盗。因此,使用“httponly”选项来阻止javascript的访问 发出http请求时,cookie始终包含在标头中,因此容易受到CSRF的攻击。因此,在登录时,“刷新令牌”和“访问令牌”在后端创建,存储在数据库中,并返回到客户端 使用访问令牌请求api,如
总之 在后端服务器中,是否应将访问令牌作为cookie发送,并将刷新令牌包含在正文中?
如果您有任何想法,我们将不胜感激。代币通常会在回复正文中发回。这样,您的前端应用程序就可以轻松地读取它们,并在需要的地方进行存储。通常,将它们存储在内存中就足够了(在应用程序的变量或状态中,等等)。当用户刷新页面时,他们将不得不再次登录,但如果授权服务器支持“记住我”之类的内容,那么这应该不是问题。如果您使用的是符合OpenID Connect的授权服务器,那么您可以执行静默登录-因此无需将用户重定向到任何地方即可获得令牌 如果您将令牌存储在仅http的cookie中,那么您的应用程序将无法访问它们,因此您将无法从应用程序调用任何API。我认为这不是你想要达到的
将令牌保存在内存中可以帮助您更安全地抵御XSS攻击,但您永远不会100%安全。看一看这个演讲:它是在哪里被解释的。事实上,确保XSS攻击不会窃取您的令牌的唯一方法是将令牌保存在后端应用程序中,而不是浏览器中。我将两者都发送到正文中,但是,如果您将它们作为仅http的cookie发送,而它们在客户端代码中无法访问,则它们将在将来的请求中发送(当然,只要你在请求中发送cookies)@JaromandaX感谢你的想法。你在哪里向主体发送令牌并存储访问令牌?我从服务器向主体发送令牌。我在客户端存储访问令牌