2017-08-31 155 views
1

我正在开发一个MEAN栈应用程序,目前我正在建立一个账户系统。我见过几个关于认证的教程,全部使用JWT。 我也看到JWT是通过像HTTP这样的非安全连接保护通信传输的好方法。通过HTTPS通信需要JWT吗?

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

+0

“安全”有两种不同的概念:通信诉诸安全。保护帐户和网站内容。JWT对于HTTPS通信不是必需的。 – shaochuancs

+1

JWT **不会**通过HTTP等非安全连接保护通信传输。JWT主要是一种认证系统,**只应与HTTPS **一起使用,但JWT不会增加HTTPS的安全级别。也许你的反向问题会更有意义 – pedrofb

回答

0

如今开发人员更喜欢基于令牌的身份验证而不是会话。基于令牌的身份验证比Session具有许多优点。 我们使用JWT即JSON Web Token在用户身份验证后生成一个令牌,每次您的前端应用程序进行API调用时,您的系统都应该检查请求是否具有有效令牌,如果有,那么它有效视为有效的用户。

总之,我们使用JWT来验证我们的API调用它是无关HTTP或HTTPS

+0

好吧,所以这是一种方法来确保用户在请求我的后端服务时需要进行身份验证并验证其身份验证吗? 我见过几个视频/教程(请参阅:https://jwt.io/introduction/),它告诉JWT用于通过HTTP保护通信,因为它们正在加密传输的数据,并且可以确保数据没有修改,即其完整性没有受到影响 –

+0

这太正确了。看这个。 https://www.youtube.com/watch?v=K6pwjJ5h0Gg – Vicky

+0

JWT可能比Session更好,但它绝对没有必要。 – shaochuancs

3

JWT不应该使用加密混淆。从jwt.io

JSON网络令牌(JWT)是一个开放标准(RFC 7519)定义安全传输各方之间的信息 作为一个JSON对象 紧凑,自成一体的方式。

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,因此,在中等攻击时,您的应用程序易受攻击。

+0

我认为OP对2种不同的“安全”概念感到困惑:通信的安全性vs保护帐户和网站内容 – shaochuancs

+0

就是这样,我没有得到JWT的真正用途,那就是它被用来取代**会议**,我认为它的作用与HTTPS相同 –

2

是否需要通过HTTPS通信进行JWT?

号通讯协议(HTTP V.S. HTTPS)是一方面,与认证机制(JWT V.S.会议)是另一个 - 这些是2完全不同的区域。

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

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

+0

是的它是不是必需的,但我的问题是:通过HTTPS使用JWT需要吗? 但是,谢谢指出会话可用于验证用户的身份验证! –

+0

@MaximeFlament那么,对于“通过HTTPS使用JWT”,我仍然不认为这是必要的 - 当然,这是一个很好的解决方案,但也有很多其他的好方案。某些网站甚至没有自己的帐户系统并使用第三方登录服务 - 在这种情况下,网站不会维护其自己的JWT令牌 – shaochuancs

+0

JWT可以通过HTTP连接使用。它仅取决于应用程序上下文。它也可以加密:请参阅https://tools.ietf.org/html/rfc7516 –