永久授权PHP应用程序向JWT授权的受保护API发出请求

Lar*_*ars 8 authentication api authorization jwt laravel

也许我用错误的关键字搜索但我从未发现任何有关以下情况的信息:

我有一个带有JWT auth的API(Laravel + tymon/jwt-auth)和一个应该查询受JWT令牌保护的API的PHP应用程序.

我怎样才能确保应用程序始终是经过身份验证的?在阅读了很多关于JWT auth的教程和文章后,我留下了这些想法:

  • 使用永不过期的令牌,永久存储在消费应用程序中.如果我理解正确,这可能是一个安全问题,因为有权访问该令牌的人可以访问api,只要他愿意?但我不明白为什么如果令牌被盗,这个令牌不应该被无效?
  • 刷新每个请求上的令牌并使旧请求无效.这意味着消费应用程序必须在其存储中的每个请求之后更新令牌(我想这将是最有意义的数据库).在我看来,这产生了很多开销,并没有阻止jwt-auth的refresh_ttl设置.
  • 使用额外的API请求(基于cron的perhabs?)到refresh路由以防止令牌过期.refresh_ttl我认为还有jwt-auth的问题.

我想知道为什么似乎没有关于这种情况的讨论/文章.关于这个问题的任何帮助我都非常欢迎!

Mag*_*gus 1

您不希望用户每次都登录,但也不希望他们永远登录。

这是我的想法

  • 我已经在商业应用程序中使用了 1 年的令牌,我将它用于低级别的第三方开发人员,API 概念对他们来说已经是压倒性的,所以我在身份验证方面很轻松。每年他们的应用程序都会崩溃一次,他们必须寻求新的代币,虽然设计很糟糕,但它确实有效。

  • 在每个请求上刷新您的令牌会降低您的性能,并使攻击者能够以一致的方式破解/预测您的密钥,这没有什么好处。

  • 在我看来,这是你最优雅的建议。您可以使用一些 PWA 功能来实现这一点。

我建议将时间增加到refresh_ttl30 天并保持ttl一小时。如果您使用 SPA 或重型 js 应用程序:在您的 javascript 上,您可以执行 ajax 设置(或原型或您的 javascript 框架用于 oop 的任何内容),并在每次获得 .

如果您的应用程序仅使用常见的页面刷新,请将 JWT 存储在 cookie 上,然后您的应用程序可以在需要时刷新它,并且不需要制作特殊的 js。HTTPS 将负责安全性。