服务器如何通过基于令牌的授权将JWT发送给客户端?

时间:2020-10-14 09:06:41

标签: java jwt authorization token bearer-token

我正在学习Java和Spring中的身份验证以及基于会话和基于令牌的身份验证之间的区别。

我知道在基于会话的身份验证中,用户会将用户名/密码发送到服务器。它可以使用html表单或基本身份验证发送凭据。之后,服务器创建一个会话,并在像这样的set-cookie: sessionid的cookie头中发送会话ID,当用户发出另一个请求时,它将在像这样的cookie: sessionid的cookie头中使用会话ID。然后服务器将Cookie中存储的会话ID与内存中存储的会话信息进行比较,以验证用户的身份并发送具有相应状态的响应。

我不确定基于令牌的身份验证中会发生什么。用户将以与第一种情况相同的方式将用户名/密码发送到服务器:html表单,基本身份验证等。服务器创建JWT,并将JWT通常发送到本地存储中的用户浏览器。但是我不明白服务器是如何将JWT发送到客户端的?它是否在set-authorization: jwt这样的标头中发送JWT?放置jwt的标头的名称是什么?之后,当客户端发出新请求时,JWT将位于授权标头中,例如Authorization: Bearer jwt。所以我不明白JWT是如何从服务器发送到浏览器的。任何反馈将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

您对基本身份验证说的是某种程度上是正确的,但不是完全。在基本身份验证中,客户端几乎总是将用户名和密码发送给服务器,服务器通过这些信息对用户进行身份验证(这意味着客户端在每个请求中发送这些信息)。您关于df = pd.DataFrame({ '1': [0.155, 0.138, ...], '2': [0.473, 0.307, ...], '3': [0.291, 0.490, ...], '4': [0.080, 0.064, ...], 'list': [[0.030, 0.040, 0.750, 0.130], [0.030, 0.040, 0.750, 0.130], ...] }) 所说的话在基本身份验证中不是必需的。客户端可以将用户名和密码之类的信息存储在存储中,并在每次请求时将其发送到服务器。

coockie怎么样?为什么它更可靠?

在JWT客户端中,使用身份验证路径从服务器获取令牌,因此服务器向客户端提供诸如JWT之类的API,并且该路径通常由其他安全机制保护(也可以是基本身份验证)因此客户端将用户名和密码发送给用户的标头中的此路径,它将在响应正文中获得/user/authenticate令牌 ,然后将请求发送到其他资源(例如{{1} })客户端将令牌发送到这些请求的标头中,如下所示:

JWT

在JWT和其他基于令牌的身份验证机制中,客户端不应将用户的用户名和密码保存在其存储中的某个位置。他们可以(或应该)保存在存储中的东西是他们从服务器收到的令牌,因此在每个请求中发送的是令牌,而不是用户的用户名和密码,因此这种机制更加安全