通过 HTTPS 通信是否需要 JWT?

Is JWT necessary over HTTPS communication?

我正在开发一个 MEAN 堆栈应用程序,目前正在设置一个帐户系统。我看过几个关于身份验证的教程,都使用 JWT.

我想知道 JWT 是否可以用作通过非安全连接(如 HTTP)保护通信传输的方式?

我已经设置了 HTTPS 以从我的 Angular 4 前端到我的 NodeJS + Express 后端进行通信,因此,想知道是否需要 JWT 来保护我的通信?

现在开发人员更喜欢基于令牌的身份验证而不是会话。基于令牌的身份验证与会话相比有很多优势。 我们使用 JWT,即 JSON Web Token 在用户身份验证后生成令牌,每次您的前端应用程序进行 API 调用时,您的系统应检查请求是否具有有效令牌,如果它存在且有效则被视为有效用户。

简而言之,我们使用 JWT 来验证我们的 API 调用,它与 HTTP 或 HTTPS 无关

JWT 不应与加密相混淆。来自 jwt.io:

JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object.

JWT 使用 public/private 密钥对签名,因此可以验证发件人,并验证有效负载未被修改。但是,JSON Web 令牌是明文形式。

var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ";

var payload = token.split('.')[1];

console.log('Payload: '+atob(payload))

下图来自 jwt.io,显示了使用 JWT 时的身份验证流程。

您需要 SSL/HTTPS 来 加密 通信。没有 SSL/HTTPS 攻击者可以嗅探网络流量并获取 JWT,因此您的应用程序容易受到中间人攻击。

通过 HTTPS 通信是否需要 JWT?

No.通信协议(HTTPv.s.HTTPS)是一回事,认证机制(JWTv.s.Session)又是一回事——这是两个完全不同的区域。

对于通信协议(HTTPv.s.HTTPS),可以单独使用HTTPS,不需要任何JWT令牌或会话。例如,可以制作一个静态网站(仅 HTML+CSS)并使用 HTTPS 提供服务。这样网站就可以通过CA认证,防止伪造攻击。

即使您需要在Web 应用程序中进行身份验证,JWT 令牌也不是唯一的选择。 Session 是老技术,但仍然可靠,这使得 JWT 绝对不需要

不,当您的服务器支持 HTTPS 时,不需要 JWT。 HTTPS 协议确保请求和响应在两端(客户端和服务器)都被加密。

我相信您会希望在每个请求中向服务器发送用户凭据,然后服务器在发送来自服务器的任何响应之前验证用户。

虽然您可以执行上述操作,但在服务器端,您最终会在每个请求中针对数据库验证用户凭据,这是一项昂贵的任务,您可以在使用 JWT 时避免这种情况。

JWT 基本上对用户进行一次身份验证并颁发一个可以在一段时间内有效的访问令牌。

我是智威汤逊新手。这是我在 http 而不是 https 中对 JWT 进行攻击的场景。假设给 userA 下发了一个 JWTa,用于访问服务器上的资源 A。黑客也是服务器的合法用户,他让JWTh访问资源H。在没有https保护的情况下,黑客可以嗅探网络,从A的请求中获取http头中的JWTa,并将其放入黑客的请求中。由于 JWTa 是一个有效的令牌,所以黑客可以访问资源 A。我猜 JWT 协议可以防止这种情况,但我不知道如何。签名通过验证后,还需要对声明进行验证。好像“aud”可以防止这种情况,但我不知道它是如何工作的。