当前位置: 首页 > 知识库问答 >
问题:

将签名的cookie与JWT表示为用于身份验证的cookie

南宫炜
2023-03-14

首先,我要说,这不是客户端令牌与服务器端会话引用的问题。我理解这些差异,我已经决定采用无会话的实现方式。

我还决定使用cookie来实现客户端的持久性和传输,而不是使用localStorage、query param、auth headers等。

好了,现在我考虑两种在客户端上保存用户ID的方法。两者都可以通过数据签名防止篡改。

Express有一个中间件可以启用签名cookie,或者我可以使用一个JWT来签名数据(我仍然会通过cookie发送)。

到目前为止,我的想法是使用签名cookie,它的处理开销更小,并且做了特定的事情,我不一定需要嵌套json格式的数据。此外,我仅将其用于对Web服务器上的用户进行身份验证,而不是API或其他授权。我不需要公私非对称密钥验证。

JWTs是很好的标准,我已经将其用于OAUTH,但对于我的站点auth,我不需要一些好处。例如,我不需要它来实现可转移性。我不会有不同的sig算法或令牌类型。

然而,我很欣赏JWT是一个公认的标准,并且有很多支持/文档。

为什么我应该选择使用JWT进行网站授权和客户身份验证,我是否有什么遗漏?

顺便说一句,在发布问题之前,我已经对此进行了研究。这里有一个非常相似的,JWT vs cookie用于基于令牌的身份验证

然而,由于以下几个原因,得票最多的答案并不适用。主要是,我已经决定是否为JWT使用cookies。我将使用具有sameSite等选项的Cookie来防止CSRF攻击,以及:expires、secure、httpOnly和signed(这是express特有的)。

共有1个答案

东门修能
2023-03-14

到目前为止,我的想法是使用签名cookie,它的处理开销更小,并且做了特定的事情,我不一定需要嵌套json格式的数据。此外,我仅将其用于对Web服务器上的用户进行身份验证,而不是API或其他授权。我不需要公私非对称密钥验证。

通过使用cookie解析器的签名选项,您的cookie看起来像:user\u id=111。base64Signature这里的主要问题是您的令牌上没有过期标记,因此即使您在cookie上设置了过期标记,如果cookie以某种方式被盗并被使用,您的服务器也会接受这些请求。解决方案是在令牌本身上添加时间戳。因此,现在您的负载可能会转换为json,如下所示:

{
   userId: 111,
   exp: 1637437857
}

cookie:<代码>标记=“{”userId“:111,“exp“:1637437857}”。Base64签名。因此,如果您对有效负载进行base64编码,那么这里与JWT的唯一区别就是头:token=header。有效载荷。签名

在性能方面,您将获得相同的结果(如果对负载使用json格式),因为创建hmac的方法是节点的加密。createHmac,在express中间件和使用对称签名的通用jwt库(jsonwebtoken/express jwt)中使用。

我认为如果您决定实施过期,JWT格式将使您能够使用不同的库并获得免费的验证检查(这在cookie解析器中间件中似乎缺乏),如果您不需要这样做,那么您的解决方案将完成这项工作。

 类似资料:
  • 我读了一些关于“JWT vs Cookie”的帖子,但它们只会让我更加困惑…… > 我想澄清一下,当人们谈论“基于令牌的身份验证与cookie”时,这里的cookie仅指会话cookie?我的理解是,cookie就像一个介质,它可以用来实现基于令牌的身份验证(在客户端存储可以识别登录用户的东西)或者基于会话的身份验证(在客户端存储与服务器端会话信息匹配的常量) 为什么我们需要JSON web令牌?

  • 我必须说,我对整个模型非常困惑,我需要帮助把所有的浮动件粘在一起。 我不是在做Spring REST,只是简单的WebMVC控制器。 什么让人困惑?(错误之处请指正) 第三方身份验证 要针对第三方进行身份验证,我需要通过扩展AuthenticationProvider来拥有自定义提供程序 null 问题: 何时调用AbstractAuthenticationProcessingFilter#Suc

  • 我有一个客户端服务器场景。 我有厚客户端和瘦客户端(浏览器),它们与我的服务器进行通信。 我的胖客户端使用X-509系统证书进行客户端证书身份验证,并与服务器通信 此外,此证书用于生成签名URL(带过期时间),以便我的瘦客户机与服务器通信,用于完整性和授权目的。在这种情况下,我也有一个基于令牌的方法用于身份验证。 现在,我想使用客户端凭据或基于身份验证代码将身份验证机制移动到基于OAuth的流。

  • 我正在开发一个具有自己的身份验证和授权机制的REST应用程序。我想使用JSON Web Tokens进行身份验证。以下是有效且安全的实现吗? < li >将开发一个REST API来接受用户名和密码并进行认证。要使用的HTTP方法是POST,因此没有缓存。此外,在传输时还会有安全SSL < li >在认证时,将创建两个JWTs访问令牌和刷新令牌。刷新令牌将具有更长的有效期。这两个令牌都将写入coo

  • 我试图用PHP为两个主题相连的领域创建一个简单的SSO系统。 因此,我想知道是否可以将包含用户用户名的签名JWT令牌从域a存储到本地存储。然后使用来自域B的相同密钥来验证JWT,这将导致成功的身份验证。 我在谷歌搜索了一些答案,我发现其中一些包含了一个中间认证域,它将负责认证。但我只想把我有的两个域联系起来。 谢了。

  • 我正在使用SpringBoot开发具有微服务架构的Rest Backend。为了保护endpoint,我使用了JWT令牌机制。我正在使用Zuul API网关。 如果请求需要权限(来自JWT的角色),它将被转发到正确的微服务。Zuul api网关的“WebSecurityConfigrerAdapter”如下。 这样,我必须在这个类中编写每个请求授权部分。因此,我希望使用方法级安全性,即“Enabl