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

基本身份验证是基于会话的身份验证吗?为什么更推荐Jwt?,jwt,basic-authentication,bearer-token,jwt-auth,Jwt,Basic Authentication,Bearer Token,Jwt Auth,我正在学习Java和Spring的基本身份验证和Jwt身份验证,我想问一下基本身份验证是否是基于会话的身份验证 我知道,在基于会话的身份验证中,当客户端登录时,会话ID存储在客户端浏览器的cookie中,之后当客户端发出另一个请求时,服务器将会话ID与存储在服务器内存中的数据进行比较。我还想问您sessionId是如何从客户端浏览器发送到服务器的?它是像令牌一样在头中发送的还是如何发送的 最后一个问题是服务器如何验证Jwt令牌?我知道,在会话身份验证的情况下,从客户端发送的sessionId将与

我正在学习Java和Spring的基本身份验证和Jwt身份验证,我想问一下基本身份验证是否是基于会话的身份验证

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

最后一个问题是服务器如何验证Jwt令牌?我知道,在会话身份验证的情况下,从客户端发送的sessionId将与服务器内存中的数据进行比较。但是在Jwt认证的情况下会发生什么呢?令牌随标头一起发送,我知道服务器会验证它,并且服务器内存中没有数据。那么服务器如何比较令牌?任何反馈都将受到重视!谢谢大家!

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

那你为什么要问

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

Authorization: Basic base64(username:password)
服务器可能使用也可能不使用会话cookie。会话cookie可以与其他身份验证手段一起使用,甚至可以不使用任何身份验证

sessionId如何从客户端浏览器发送到服务器

作为会话,cookie作为http头发送,浏览器将其视为会话持久性

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

应该在合同上签字。注意,令牌通常有3个部分

header.body.signature
标头指定签名类型(非对称密钥或共享密钥),签名通过验证(签名或hmac ed)标头和内容

因此,服务器必须验证颁发者、过期日期和签名

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

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

为什么更推荐Jwt

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


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

谢谢你的回复。我想问你,在JWT的情况下,JWT被发送到客户端,而服务器端没有任何信息。不是吗?那么服务器如何为每个用户存储机密呢?我认为它应该像这样存储键/值对:user1/secret1,user2/secret2。或者怎么做?在这种情况下,你称之为“服务器”是什么?您可能希望分离一个提供资源的“服务器”服务(实际上正在执行某些操作),如果客户机提供令牌,它通常被称为SP服务提供者。然后是一个身份验证服务IdP——一个颁发令牌的身份提供者。身份提供者需要验证用户凭据(例如密码,…),然后确实需要拥有用户的机密。但是-(普通或加密)。