基本身份验证是基于会话的身份验证吗,为什么更推荐 JWT?



我正在学习使用 Java 和 Spring 进行基本身份验证和 Jwt 身份验证,我想问您基本身份验证是否是基于会话的身份验证?

我知道在基于会话的身份验证中,当客户端登录时,sessionId 存储在客户端浏览器的 cookie 中,之后当客户端发出另一个请求时,服务器会将 sessionId 与存储在服务器内存中的数据进行比较。我还想问你sessionId是如何从客户端浏览器发送到服务器的?它是像令牌一样在标头中发送还是如何发送?

最后一个问题是服务器如何验证 JWT 令牌?我知道在会话身份验证的情况下,将从客户端发送的sessionId与服务器内存中的数据进行比较。但是在 JWT 身份验证的情况下会发生什么?令牌与标头一起发送,我知道服务器对其进行了验证,并且服务器的内存中没有数据。那么服务器如何比较令牌呢?任何反馈将不胜感激!谢谢!

如果基本身份验证是基于会话的身份验证?
我知道在基于会话的身份验证中

那你为什么问?

实际上 - 基本身份验证意味着,用户凭据(用户名和密码(在授权 http 标头中发送

Authorization: Basic base64(username:password)

服务器可能会也可能不会使用会话 Cookie。会话 cookie 可以与其他身份验证方式一起使用,甚至可以在没有任何身份验证的情况下使用

会话 ID 如何从客户端浏览器发送到服务器?

作为会话 cookie 会话cookie 作为浏览器视为会话持久性的 http 标头发送

最后一个问题是服务器如何验证 JWT 令牌?

应对 JWT 令牌进行签名。请注意,令牌通常有 3 个部分

header.body.signature

标头指定签名类型(非对称密钥或共享密钥(,签名经过身份验证(签名或 HMAC-ED(标头和内容。

所以 - 服务器必须验证颁发者、过期和签名。

因此,服务器(服务提供商(不需要预先知道客户端的身份。服务提供商需要知道颁发者(颁发 jwt 令牌的身份验证服务(公钥或共享密钥。

JWT 验证后,服务可以根据 jwt 令牌中的信息假定调用方的身份。

为什么更推荐 JWT?

这取决于用例。(一切都有其优点和缺点(

我建议在分布式和/或微服务架构中使用 jwt。该服务无需访问凭据或对用户进行身份验证。

基本身份验证中,我们需要为每个请求发送用户名和密码。
会话身份验证中,我们将在初始请求时发送用户名和密码。然后从服务器响应中,我们获取存储在浏览器中的会话 ID,并将其用于请求。在
令牌身份验证中,我们将在初始请求时发送用户名和密码。然后从服务器响应中,我们获取令牌并将其用于请求。
希望你明白了!!

最新更新