【问题标题】:Laravel Passport grant API Token with session or restrict access to js filesLaravel Passport 通过会话授予 API 令牌或限制对 js 文件的访问
【发布时间】:2018-11-16 15:54:14
【问题描述】:

问题
我正在使用 jQuery AJAX 调用来访问我的应用程序的 API。由于我的Javascript 文件在技术上可供公众访问,因此我无法将 API 凭据放入此文件中。访问受保护 API 的 Web 路由由middleware 保护,该middleware 检查用户是否具有访问权限。从技术上讲,只要给定正确的url,就可以访问js 文件。管理页面仍然无法访问,但现在可以访问 API。

问题
我想知道是否有办法
A) 使用会话 cookie 获取用户并检查该用户是否是管理员。

B) (首选)使 js 文件只能被使用它们的网络路由访问(在我的例子中,管理员路由)

C)我显然没有看到的另一个选项可以解决我的问题。

我正在为 API 路由使用 Laravel 的 Passport API 身份验证。

PS:每次手动输入凭据不是一种选择。这些路线通常需要快速访问。

【问题讨论】:

  • 我可以知道您存储访问令牌的方式和位置吗?如果用户正在传递访问令牌,那么您可以从那里获取用户范围(例如管理员、其他角色)。
  • 只有 2 个角色,admin 和 non-admin,我用中间件检查了 web 路由的角色。 API 令牌和 API 客户端驻留在各自的护照生成表中。

标签: php laravel laravel-5.3 laravel-passport


【解决方案1】:

如果我理解你的问题......你可以传递你想要的所有信息,甚至是 ajax 请求中的会话信息,你唯一需要的是后端中的某种中间件检查会话(任何变量)是由服务器(您的后端)生成的。

该算法将类似于检查用户用于访问数据的令牌是否由服务器生成的算法。你明白这个想法吗?将要检查用户是否为管理员的“会话凭据”保存在数据库中。

要回答另一个问题,您需要一些处理请求的 php 文件,然后,如果用户有权访问 js 文件,那么您就可以提供它。

有时我使用类似的算法来创建跟踪系统并提供白色像素(.jpg 文件),唯一的变化是我不检查凭据。

注意不要忘记在你的文件中添加适当的头文件(带有 js 文件的文件) header("内容类型:应用程序/javascript");

我不建议使用会话信息来验证所有这些内容,因为可能存在安全问题。如果可以,请使用护照生成的令牌来验证用户是否是管理员。

我希望我在解释中说明清楚,并且您理解这个想法。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-01
    • 2018-05-29
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多