Rest API JWT基于令牌的身份验证安全|laravel/dingo/JWT



我使用基于JWT令牌的身份验证来验证我向移动应用程序公开的RESTAPI。我有一个登录API,用户将点击并获得一个JWT作为响应。应用程序必须对其余请求使用JWT令牌。在开发过程中出现的一个问题是。

一旦我给用户一个身份验证令牌,他就可以访问这组API的其余部分。

在我的当前设计中,带有JWT令牌的用户1试图访问用户2的资源是可能的,这是我的系统中的一个缺陷。在每次请求时,我是否必须检查令牌中的用户id和请求进程的用户id是否匹配,然后继续?或者还有其他更好的方式来处理这个问题吗?

我使用的是带有dingo-rest和JWT-lib的laravel框架。

更新

例如:

作为个人,我从应用程序中获得了端点。我登录并收到了我的jwt令牌,它将在我的其他资源中有效。现在,为了获得我使用不同用户id添加的产品列表,我可以这样做

标题中的我的JWT令牌

GET /products/3  and 3 is not my user id!

在这种情况下,我只是验证一个jwt令牌,它将验证它并使用非MINE的资源进行响应!

TL;DR:以这种方式使用它是很常见的,你应该做好它!

更多详细信息:这里的重点是,令牌"足够模糊",因此未经授权的用户从授权用户处获得令牌的可能性微乎其微。在您的示例中,这意味着用户2可以非常高的概率不猜测用户1正在使用的令牌。

当然,这种方式可能是中间人攻击,所以你应该确保只通过安全连接传输令牌。我建议"仅HTTPS"。此外,您可能只考虑在标头中发送和接收令牌,这样它们就不会在任何内容视图中公开。

作为更多的背景:想想PHP"标准"会话cookie是如何工作的:用户(客户端)在cookie中获取会话ID并将其发送回。这与您在JWT中所做的基本相同,因为用户2也可能以某种方式从用户1那里窃取cookie,并代表他行事。JWT甚至为您添加了一个级别,您可以很容易地确认您确实发布了令牌(前提是您使用的是RSA密钥对风格的方法),我认为这比PHP会话ID cookie方法有优势。

最新更新