繁体   English   中英

服务器如何在基于令牌的授权中将 JWT 发送到客户端?

[英]How server sends the JWT to client in Token Based Authorization?

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

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

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

您所说的基本身份验证在某种程度上是正确的,但并不完全正确。 在基本身份验证中,客户端几乎总是将用户名和密码发送到服务器,服务器通过这些信息对用户进行身份验证(这意味着客户端在每个请求中发送这些信息)。 您所说的关于coockie内容在基本身份验证中不是强制性的。 客户端可以将用户名和密码等信息存储在存储中,并在每次请求时将它们发送到服务器。

JWT怎么样,为什么它更可靠?

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

authorization: Bearer jwt

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM