Laravel Sanctum 多租户上的主密钥 API

Laravel Sanctum master key on multi tenant API

我正在尝试构建一个多租户 API,到目前为止,我的 API 运行良好,我设法实现了 multi-tenancy(使用 archtechx/tenancy) ,使用 sanctum 颁发密钥的身份验证也可以正常工作。

应用程序的结构有一个中央域 example.com,有权访问该域的用户称为“超级管理员”,他们应该能够使用他们的 API 令牌进行访问(由 sanctum 在登录时发布)每个其他子域(或租户)API 具有不受限制的访问权限。

租户位于 tenant.example.com 等子域中,并拥有个人数据库,每个租户一个。

我在考虑几个解决方案来实现这个:

  1. 让超级管理员模拟租户的管理员 API 并像该管理员一样做事
  2. 找到一种方法向在每个租户(子域)上工作的超级管理员颁发“主密钥”

我倾向于第二种解决方案,因为我觉得它更优雅。我一直在网上搜索此类 problem/feature 的最佳做法,但没有找到与我的问题完全匹配的内容。

总之,解决方案 2 是否可行?如果是这样,有没有办法用 sanctum 发出这样的“万能钥匙”?

我正在使用:

Laravel 8.48.1

Lighthouse-php 作为通过 Laravel

服务 GraphQL 的框架

Sanctum 作为身份验证守卫

Tenancy for Laravel 作为 Multi-tenancy 包

主键

一个简单的想法:你可以为 Sanctum 令牌设置 token abilities。或许你可以创建 master:access 或类似的能力,其功能类似于 Master key?您可以授予超级管理员 master:access 能力,同时为他们创建 API 令牌。

这确实需要 tenant 访问 master 数据库并授权该特定密钥的能力。我不知道该包的具体实现,但我之前使用的 Tenancy 项目提供了对 master 数据库的轻松访问。您可以实施某种中间件或授权来检查用户是否拥有具有 master:access 能力的令牌。

冒充用户

您提出的其他模拟解决方案似乎也可行,并且由根据 package documentation 的程序包提供。这确实需要每个租户都有某种 admin 用户。由于所有 Superadmins 都可以通过 1 个共享 admin 用户访问租户,我不建议选择此选项。