使用jwt进行身份验证时如何在客户端使用httpOnly?

Posted

技术标签:

【中文标题】使用jwt进行身份验证时如何在客户端使用httpOnly?【英文标题】:How to use httpOnly on the client side when using jwt for authentication? 【发布时间】:2022-01-01 10:58:54 【问题描述】:

我了解在使用 express 和 jwt 时如何在服务器端将 cookie 设置为 httpOnly。

res.cookie("jwt", accessToken,  secure: true, httpOnly: true )

但是,我们如何利用客户端的 httpOnly 来确保身份验证过程的安全并防止 cookie 被劫持?可以举个例子解释一下吗?

我还试图了解在 httpOnly 为 false 时访问 cookie 和在 httpOnly 为 true 时访问另一个 cookie 之间的区别。我知道后者将返回空字符串,但是当使用 jwt 进行身份验证时,我们在客户端哪里使用它。我们是否应该只发送一个 ajax 调用而不去操心其他任何事情?

【问题讨论】:

您不需要在客户端上使用 cookie 做任何事情,它应该随着每个请求自动发送。还要考虑使用 JWT,会话通常更容易、更安全。 【参考方案1】:

您不应将 JWT 令牌直接存储在 cookie 中,因为在浏览器中查看 cookie 的任何人都可以窃取 cookie。如果您想将 cookie 存储在 cookie 中,则应使用强加密对其进行加密。

HttpOnly 将阻止 javascript 访问 cookie,最好始终设置所有重要的 cookie。此外,您应该将安全属性添加到所有 cookie。还请考虑设置 SameSite 属性以使其更加安全。

【讨论】:

以上是关于使用jwt进行身份验证时如何在客户端使用httpOnly?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用JWT进行身份验证与授权

使用 JWT 进行身份验证时是不是可以消除私钥攻击向量?

使用 jwt 在微服务中进行身份验证

当 Laravel 用作客户端时,JWT 存储在哪里进行身份验证?

使用 JWT 进行环回身份验证

使用 JWT 和刷新令牌对移动应用程序进行身份验证