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 中,我们将在初始请求时发送用户名和密码。然后从服务器响应中我们得到令牌并将其用于请求。
希望你明白了!!
我正在使用 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 中,我们将在初始请求时发送用户名和密码。然后从服务器响应中我们得到令牌并将其用于请求。
希望你明白了!!