Basic Authentication是基于Session的认证吗,为什么更推荐Jwt?

Is Basic Authentication a Session based authentication and why Jwt is more recommended?

我正在使用 Java 和 Spring 学习基本身份验证和 Jwt 身份验证,我想问你基本身份验证是否是基于 session 的身份验证?

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

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

if basic authentication is a session based authentication?
I know that in a session based authentication

那你问什么?

实际上 - 基本身份验证意味着,用户凭据(用户名和密码)在授权 http header

中发送
Authorization: Basic base64(username:password)

服务器可能使用也可能不使用 session cookie。 Session cookie 可以与其他身份验证方式一起使用,甚至可以不使用任何身份验证

how is the sessionId sent from client browser to server?

作为 session cookie session cookie 作为 http header 发送,浏览器将其视为 session-persistent

And the last question is how the server validate the Jwt token?

JWT token 应该签名。请注意令牌通常有 3 个部分

header.body.signature

header 指定签名类型(非对称密钥或共享密钥)并且签名经过身份验证(签名或 hmac-ed)header 和内容。

因此 - 服务器必须验证颁发者、有效期和签名。

所以服务器(服务提供商)不需要预先知道客户端的身份。服务提供者需要知道发行者(发行 jwt 令牌的身份验证服务)public 密钥或共享密钥。

在 jwt 验证之后,服务可以根据 jwt 令牌中的信息假设调用者的身份。

why Jwt is more recommended?

这取决于用例。 (凡事有利有弊)

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

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