JWT是否需要通过HTTPS通信?

时间:2017-08-31 09:30:57

标签: node.js angular jwt mean-stack

我正在开发一个MEAN堆栈应用程序,而我目前正在建立一个帐户系统。我已经看过几个关于身份验证的教程,都使用 JWT 。 我还看到JWT是通过HTTP等非安全连接保护通信传输的好方法。

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

4 个答案:

答案 0 :(得分:5)

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

  

JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一个   紧凑且独立的方式,可安全传输信息   在各方之间作为JSON对象。

JWT使用公钥/私钥对进行签名,以便验证发件人并验证有效负载未被修改。但是,JWT是明文。



var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ";

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

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




以下是来自jwt.io的图,显示了使用JWT时的身份验证流程。 enter image description here

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

答案 1 :(得分:3)

通过HTTPS通信是否需要JWT?

否。通信协议(HTTP v.s. HTTPS)是一回事,认证机制(JWT v.s.Assession)是另一回事 - 这两个区域完全不同。

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

否,当服务器支持HTTPS时,不需要JWT。 HTTPS协议可确保在客户端和服务器两端对请求和响应进行加密。

我相信您希望在每个请求中向服务器发送用户凭据,并依次从服务器验证用户,然后再从服务器发送任何响应。

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

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