如今,许多开发人员使用JWT身份验证来授权api调用。 顺便说一句,如果黑客可以捕获经过身份验证的用户的api呼叫请求,那么他可以拥有经过身份验证的JWT令牌。 然后,黑客可以使用授权的JWT令牌访问此API,而无需进行身份验证。 这好吗? 我想知道JWT身份验证实际上是安全的。 你能解释一下吗?
答案 0 :(得分:1)
jwt是包含有关用户身份和声明的信息的代码,仅在有限的时间内有效。
除了颁发令牌的授权终端之外,任何人都无法读取或更改代码。因此,安全无法被篡改。这意味着令牌可以完全信任。您无需验证令牌,您可以使用身份信息和声明,而无需咨询数据库。
但这也是缺点。一旦发出,令牌有效,直到它过期,因为过期不能改变。这就是令牌只应通过安全线路发送到服务器的原因。您不希望黑客拦截令牌。
但如果它发生了,那么呢?
有几种选择。您可以使用短期令牌,这意味着令牌在发布后很短的时间到期。如果一个令牌被截获,它只在很短的时间内有效。在这种情况下,您理所当然地认为黑客可以在有限的时间内访问系统。优点是你需要更少的资源,而且黑客的努力可能是不值得的。
另一种选择是在每个请求上验证令牌。这需要更多资源(例如,在数据库中查找),但您可以使用某种缓存。如果某些内容发生了变化,例如IP地址,那么您可以使令牌无效。但问题是你是否可以检测到黑客是否发送了令牌。
所以这取决于所选择的策略。 但是:如果您发出长期访问令牌而无需验证(因此无法撤销令牌),那么您将会如果黑客获得访问令牌,则会出现问题。因此,您需要做一些事情以安全的方式使用它。
虽然我认为这应该足以帮助您理解,但我想提及使用刷新令牌。如果您使用短期访问令牌,那么您可能希望实现长期刷新令牌。这些刷新令牌用于在到期后获取新的访问令牌。优点是您不需要发送凭证,refesh令牌就足够了。但是,您只能在可以保密的应用程序中实现此功能。因为你肯定不希望黑客拦截(长期存在的)刷新令牌。
使用频率较低(与访问令牌相对),您可以添加逻辑以在使用时验证刷新令牌。您可以查阅数据库并决定拒绝请求(例如,当IP地址更改时)并撤消刷新令牌。在这种情况下,用户必须再次识别自己(发送凭证)。
答案 1 :(得分:-1)
JWT只是fsb服务器和客户端之间的安全msg传输器,因此fsb服务器可以确定客户端是否已登录;如果登录,fsb服务器将获取基于个人唯一用户的数据。
google oauth
JWT
JWT的过程
JWT说明