我一直关注此博文(https://auth0.com/blog/2015/04/09/adding-authentication-to-your-react-flux-app/),对JWT的一个方面感到困惑。
上面的帖子似乎来测试用户是否已登录,方法是检查是否存在将JWT存储为cookie,如果存在,则只需对其进行解码以查找用户名和其他信息,并将用户重定向到经过身份验证的页面。
我想知道是什么阻止某人添加虚假的JWT cookie以获取对该应用的经过身份验证的部分的访问权限?我一定错过了一些明显的东西。换句话说,在维护会话时,前端如何确保JWT是由服务器"签署的#JWT。或其他东西,而不是一个以欺诈手段创建以试图获取访问权限的东西?
答案 0 :(得分:3)
在许多应用程序中,有人可以添加一个虚假的JWT来访问前端的部分,只有他们登录时才能看到它们。但是,他们也有自己的计算机上运行的前端。可以改变代码来做同样的事情。
后端服务器使用前端不应存在的密钥对JWT进行编码,当您将JWT传递回服务器时,服务器将在处理您的请求之前对其进行解码。因此,它知道有人之前使用了您的登录凭据,它发送了JWT作为响应,并且有人再次向JWT发送它。这可以阻止没有(真正的)JWT的人对你的API的攻击。</ p>
它还优于会话cookie,因为它在服务器端是无状态的,并且它使传统浏览器中的某些跨站点请求伪造攻击更加困难,因为攻击者无法将请求嵌入到您的站点并信任浏览器添加会话cookie。
但它只是更大安全解决方案的一部分。
答案 1 :(得分:2)
JWT的安全性的关键是&#34;秘密&#34; - 应该只在受信任的服务器上的密钥(或者如果使用第三方,则与您的身份验证提供商一起使用)。使用此秘密加密JWT。它可以是密码,但JWT也支持公钥/私钥加密,因此秘密也可以是私钥。
因此,在您的情况下,阻止用户在其端部创建新JWT的原因是,除非他们知道秘密,否则他们用于创建自己的JWT的加密将无法在服务器上运行,如果编码正确,将阻止用户以他们希望的方式进行身份验证。