我在哪里需要使用JWT?

时间:2015-07-28 21:29:16

标签: authentication restful-authentication jwt

除了structure and protocol之外,我想知道JWT在哪里适合客户端/服务器通信?

  • 是否可以替换身份验证和会话Cookie?
  • 这是为了减轻在数据库或内存中存储会话令牌的服务器吗?
  • 是否让客户确保他们从预期的服务器接收数据,如果这不是问题我不需要JWT?
  • 当连接是HTTPS / SSL时,服务器到服务器通信是否必要或良好做法?

3 个答案:

答案 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究竟是什么?

它只是服务器可以生成的令牌,并且可以包含数据的有效负载。

有什么意义?

JWT有效负载可以包含用户ID之类的内容,这样当客户端向您发送JWT时,您可以确定它是由您发布的,并且您可以查看它是谁发布了。

哪里有用?

通常,在RESTful APIs,中,服务器不得使用任何类型的会话。

它与使用会话有何不同?

  • 在典型的会话流程中,浏览器会发送一个包含令牌的Cookie,然后在服务器与服务器使用的某些数据匹配对用户进行身份验证。

  • 在JWT流程中,令牌本身包含数据。服务器解密令牌以仅对用户进行身份验证。服务器上没有存储数据。

使用JWT的典型身份验证流程是什么?

  • 发送至/signin的用户凭据
  • /signin返回JWT
  • JWT存储在localStorage
  • JWT会在每次请求时发送(到API?)
  • 服务器解密JWT并从中提取用户ID
  • 服务器根据经过身份验证的用户发送响应。

答案 2 :(得分:1)

当发行人(生成JWT)和接收者(验证JWT)属于不同的自治方时,IMO JWT最有用。虽然有可能,但是不需要用JWT替换身份验证/会话cookie /令牌存储/等。

相关问题