JWT与基于令牌的身份验证的Cookie比较

10 浏览
0 Comments

JWT与基于令牌的身份验证的Cookie比较

我看了一些关于“JWT vs Cookie”的帖子,但只是让我更加困惑...

  1. 我想要一些澄清,当人们谈论“基于令牌的身份验证 vs cookie”时,这里的cookie仅仅指的是会话cookie吗?我理解的是,cookie就像一个介质,它可以用来实现基于令牌的身份验证(在客户端存储可以识别已登录用户的东西)或基于会话的身份验证(在客户端存储与服务器端会话信息匹配的常量)
  2. 为什么我们需要JSON Web Token?我之前使用标准cookie来实现基于令牌的身份验证(不使用会话ID,不使用服务器内存或文件存储):Set-Cookie: user=innocent; preferred-color=azure,我观察到的唯一区别是JWT包含了载荷和签名...而对于HTTP头部,你可以在签名或纯文本cookie之间选择。在我看来,签名cookie(cookie:'time=s%3A1464743488946.WvSJxbCspOG3aiGi4zCMMR9yBdvS%2B6Ob2f3OG6%2FYCJM')更加节省空间,唯一的缺点是客户端无法读取令牌,只有服务器能够读取...但我认为这没关系,因为就像JWT中的声明是可选的一样,令牌并不一定需要有意义
0
0 Comments

JWT vs cookies for token-based authentication这个问题的出现的原因是讨论使用令牌进行身份验证时,使用JWT还是cookies更好。下面是整理出的解决方法:

JWT和cookies的不同之处在于它们与浏览器的交互方式不同。Cookies是由服务器设置并以特定的方式发送的,可以作为浏览器和特定后端之间的身份验证cookie。而JWT则是一种专门的中介,它是一种特定结构中有关某些事实的声明。

JWT提供了许多功能,并将它们放在一个标准中,以便在各方之间使用。JWT可以在许多不同的地方作为签名断言来使用。而无论您在cookie中放入什么数据,或者是否对其进行签名,它只在浏览器和特定后端之间使用时才有意义。JWT可以用于从浏览器到后端,不同方控制的后端之间(OpenId Connect是一个例子),或者同一方的后端服务之间。

总结一下,你阅读的帖子可能正在比较JWT作为持有人令牌和用于浏览器到服务器身份验证的cookie。但是JWT可以做得更多,它引入了标准化和功能,可以在你可能想到的用例之外使用。

解决方法就是根据具体需求选择使用JWT还是cookies进行身份验证,并充分了解它们的特点和适用范围。

好的,解释得很清楚,比较实际上是在Bearer令牌和cookies之间进行的。

0
0 Comments

JWT与基于令牌的身份验证所使用的Cookies之间的区别在于浏览器将自动发送Cookies,而令牌需要明确地添加到HTTP请求中。这一特性使得Cookies成为保护网站的一种良好方式,用户登录并使用链接在页面之间导航。然而,浏览器自动发送Cookies也存在一个重大缺点,即CSRF攻击。在CSRF攻击中,恶意网站利用浏览器将身份验证Cookies自动附加到对该域的请求中的事实,并欺骗浏览器执行请求。

解决CSRF攻击的方法之一是使用CSRF令牌。使用CSRF令牌可以通过在请求中包含一个令牌来验证请求的来源。在上述示例中,如果网站要求在更改密码时提交用户名和旧密码,那么即使在访问恶意网站时,浏览器也不会自动发送身份验证Cookies,因此攻击者无法更改密码。

另一方面,JWT令牌通常用于基于令牌的身份验证。与Cookies不同,浏览器不会自动添加JWT令牌到请求中。您需要在JavaScript中编程地将JWT令牌添加到请求中。一种常见的方法是将JWT令牌存储在浏览器的本地存储中。然而,这种方法存在安全风险,因为通过JavaScript可以访问本地存储中的令牌。因此,为了增加安全性,可以将JWT令牌存储在HttpOnly Cookies中。这样,令牌将无法通过JavaScript访问。

此外,Cookies还可以用于保护Web服务,但现在更常使用令牌来实现。如果使用Cookies来保护Web服务,该服务需要位于设置了身份验证Cookies的域上,因为同源策略不会将Cookies发送到另一个域。此外,使用Cookies保护Web服务会使非基于浏览器的应用程序(如移动到平板应用程序)更难使用您的API。

,JWT和Cookies都可以用于基于令牌的身份验证,但它们有不同的工作方式和安全性考虑。JWT令牌需要在请求中明确添加,更适用于非浏览器应用程序。Cookies由浏览器自动发送,更适用于保护网站和基于浏览器的应用程序。为了增加安全性,可以通过使用CSRF令牌和将JWT令牌存储在HttpOnly Cookies中来防止CSRF和XSS攻击。

0
0 Comments

JWT vs Cookies for Token-Based Authentication

在进行令牌基于身份验证的过程中,我们通常需要选择使用JWT(JSON Web Tokens)还是cookies来发送和存储令牌。下面将介绍这个问题的出现原因以及解决方法。

首先,我们来看一下cookies和bearer tokens的区别。cookies用于发送和存储任意数据,而bearer tokens则专门用于发送授权数据,通常以JWT的形式进行编码。

Cookies是一种存储在Web浏览器中的名称-值对,并且具有过期日期和关联域。我们可以通过JavaScript或HTTP响应头将cookies存储在Web浏览器中。Web浏览器会自动在每个请求中发送属于cookie域的cookies。

Bearer token是一个值,它可以放在任何HTTP请求的Authorization头中。它不会自动存储在任何地方,没有过期日期,也没有关联域。我们需要手动将该值存储在客户端,并将其添加到HTTP请求的Authorization头中。

当我们进行基于令牌的身份验证,如OpenID、OAuth或OpenID Connect时,我们从受信任的机构接收到一个access_token(有时还有id_token)。我们通常希望将其存储起来,并与请求受保护资源的HTTP请求一起发送。有两种选择来实现这个目标。

第一种选择是将令牌存储在cookies中。这种方式可以处理存储,并自动在每个请求的Cookie头中发送令牌给服务器。服务器然后解析cookie,检查令牌,并根据情况做出响应。

第二种选择是将令牌存储在本地或会话存储中,然后手动设置每个请求的Authorization头。在这种情况下,服务器读取头信息,并像处理cookie那样继续处理请求。

关于是否将敏感数据存储在本地或会话存储中的问题,令牌是临时的,所以一般来说相对安全。至于服务器是否将ID令牌发送给浏览器,以便后续的API调用可以传递该ID令牌,以允许服务器知道是谁调用了该端点,这取决于具体的实现方式。

需要注意的是,浏览器会自动将cookies与其域下的所有请求一起发送,而不会自动发送会话存储或本地存储。此外,出于隐私保护的考虑,许多浏览器会阻止cookies追踪用户,但不太可能阻止会话或本地存储,因为这些功能在追踪方面用途较少。

在浏览器中进行HTTP请求时,不能使用Set-Cookie头。必须使用document.cookie,浏览器会在发送请求之前自动添加HttpOnly cookies。

最后需要注意的是,cookies并不是存储在浏览器中,而是由浏览器发送的一种数据。

,选择使用JWT还是cookies来进行令牌的发送和存储,取决于具体的需求和实现方式。两者都有各自的优势和适用场景,开发者需要根据实际情况选择合适的方式。

0