节点 Js 刷新身份验证令牌
Node Js refresh auth token
您如何提供刷新节点 js 身份验证令牌的示例?我的意思是我可以通过哪些参数刷新身份验证令牌?例如,如果我可以通过登录名和密码刷新它,那么我应该将单页应用程序的参数存储在哪里?据我所知,将其存储在 cookie 中对于安全性来说不是一个好主意,localstorage 也不好,因为某些浏览器不支持它。那么也许有人知道刷新令牌的另一种方式?
我创建了包含这些字段的 AuthToken 模型:
user_id, access_token, refresh_token, access_token_expiration
用户登录成功后,服务器端会向客户端发送refresh_token
和access_token
,并存储到localstorage(旧浏览器为cookies)。
并且所有后续请求都将使用 access_token
发送(我在 angular 中对 $httpProvider 使用 header x-access-token)。
当令牌过期时,客户端需要发送refresh_token
来更新access_token
、refresh_token
和expiration date
。因为我使用套接字,如果它在任何请求中过期,我可以刷新 access_token(为此我也为每个请求发送 z-refresh-token header)所以我不应该发送任何额外的请求,我可以保留当前的用户请求,只是在更新后通过套接字事件return令牌。
希望对您有所帮助
如果使用得当,Cookie 是一种非常安全的存储机制。本地存储绝不能用于身份验证信息。 OWASP 有一篇关于存储安全的精彩文章:
https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet#Storage_APIs
引用重要部分:
Do not store session identifiers in local storage as the data is always accessible by JavaScript. Cookies can mitigate this risk using the httpOnly
flag.
[With local storage] There is no way to restrict the visibility of an object to a specific path like with the attribute path of HTTP Cookies, every object is shared within an origin and protected with the Same Origin Policy. Avoid host multiple applications on the same origin, all of them would share the same localStorage object, use different subdomains instead.
回到你最初的问题:在哪里存储刷新令牌?答案:在 HttpOnly
cookie 中。这可以防止 cookie 被 XSS 攻击窃取,并且它使您的服务器很容易发布新的访问令牌(使用刷新令牌),因为服务器将在同一请求下同时访问两者。
您可以添加另一层并加密存储在 cookie 中的整个刷新令牌。
注意:使用cookie时,您还需要保护自己免受CSRF attacks
我在这两篇博文中详细介绍了前端安全和 JWT:
Token Based Authentication for Single Page Apps (SPAs)
https://stormpath.com/blog/build-secure-user-interfaces-using-jwts/
免责声明:我在 Stormpath, our service gives you a secure, hosted user database with many features. Our express-stormpath 工作 模块使您可以很容易地开始使用您的应用程序的登录和注册流程。我们正在编写新版本,它将按照我在此答案中描述的方式使用访问令牌。
您如何提供刷新节点 js 身份验证令牌的示例?我的意思是我可以通过哪些参数刷新身份验证令牌?例如,如果我可以通过登录名和密码刷新它,那么我应该将单页应用程序的参数存储在哪里?据我所知,将其存储在 cookie 中对于安全性来说不是一个好主意,localstorage 也不好,因为某些浏览器不支持它。那么也许有人知道刷新令牌的另一种方式?
我创建了包含这些字段的 AuthToken 模型:
user_id, access_token, refresh_token, access_token_expiration
用户登录成功后,服务器端会向客户端发送refresh_token
和access_token
,并存储到localstorage(旧浏览器为cookies)。
并且所有后续请求都将使用 access_token
发送(我在 angular 中对 $httpProvider 使用 header x-access-token)。
当令牌过期时,客户端需要发送refresh_token
来更新access_token
、refresh_token
和expiration date
。因为我使用套接字,如果它在任何请求中过期,我可以刷新 access_token(为此我也为每个请求发送 z-refresh-token header)所以我不应该发送任何额外的请求,我可以保留当前的用户请求,只是在更新后通过套接字事件return令牌。
希望对您有所帮助
如果使用得当,Cookie 是一种非常安全的存储机制。本地存储绝不能用于身份验证信息。 OWASP 有一篇关于存储安全的精彩文章:
https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet#Storage_APIs
引用重要部分:
Do not store session identifiers in local storage as the data is always accessible by JavaScript. Cookies can mitigate this risk using the
httpOnly
flag.[With local storage] There is no way to restrict the visibility of an object to a specific path like with the attribute path of HTTP Cookies, every object is shared within an origin and protected with the Same Origin Policy. Avoid host multiple applications on the same origin, all of them would share the same localStorage object, use different subdomains instead.
回到你最初的问题:在哪里存储刷新令牌?答案:在 HttpOnly
cookie 中。这可以防止 cookie 被 XSS 攻击窃取,并且它使您的服务器很容易发布新的访问令牌(使用刷新令牌),因为服务器将在同一请求下同时访问两者。
您可以添加另一层并加密存储在 cookie 中的整个刷新令牌。
注意:使用cookie时,您还需要保护自己免受CSRF attacks
我在这两篇博文中详细介绍了前端安全和 JWT:
Token Based Authentication for Single Page Apps (SPAs)
https://stormpath.com/blog/build-secure-user-interfaces-using-jwts/
免责声明:我在 Stormpath, our service gives you a secure, hosted user database with many features. Our express-stormpath 工作 模块使您可以很容易地开始使用您的应用程序的登录和注册流程。我们正在编写新版本,它将按照我在此答案中描述的方式使用访问令牌。