[英]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.