除了structure and protocol之外,我想知道JWT在哪里适合客户端/服务器通信?
答案 0 :(得分:12)
JWT只是一种基于JSON的流行安全令牌格式。
JWT令牌不是为了取代会话cookie而发明的。它们主要用于保护Web API(请求数据)。另一方面,会话cookie用于Web应用程序,您可以在其中登录用户并自动发送每个请求的cookie(请求页面)。
JWT令牌作为承载认证方案的一部分包含在授权HTTP头中。使用承载方案身份验证的主要优点是它不容易受到CSRF攻击,因为您的脚本需要将令牌显式附加到请求,并且可以跨域使用(与Cookie不同)。
承载方案身份验证确实需要HTTPS连接,因为只要令牌有效,任何设法窃取令牌的人都可以使用它来访问API。
OAuth2等安全协议使用JWT令牌来保护API。 OpenID Connect使用JWT令牌对Web应用程序进行身份验证,但将令牌存储在cookie中。
由于JWT令牌由颁发者(执行身份验证的服务器)进行数字签名,因此可以在不与服务器再次通信的情况下验证它们。数字签名允许您使用私钥对一段数据(在本例中为JWT令牌)进行签名,并且接收令牌的服务器仅需要公钥来验证没有任何数据被更改。因此,API服务器只需要授权服务器的公钥(这不是秘密)来信任它发出的令牌。 API的客户端带来令牌,API服务器可以在不与授权服务器通信的情况下对其进行验证。
答案 1 :(得分:4)
它只是服务器可以生成的令牌,并且可以包含数据的有效负载。
JWT有效负载可以包含用户ID之类的内容,这样当客户端向您发送JWT时,您可以确定它是由您发布的,并且您可以查看它是谁发布了。
通常,在RESTful APIs,中,服务器不得使用任何类型的会话。
在典型的会话流程中,浏览器会发送一个包含令牌的Cookie,然后在服务器与服务器使用的某些数据匹配对用户进行身份验证。
在JWT流程中,令牌本身包含数据。服务器解密令牌以仅对用户进行身份验证。服务器上没有存储数据。
/signin
的用户凭据/signin
返回JWT localStorage
答案 2 :(得分:1)
当发行人(生成JWT)和接收者(验证JWT)属于不同的自治方时,IMO JWT最有用。虽然有可能,但是不需要用JWT替换身份验证/会话cookie /令牌存储/等。