Laravel Sanctum 主密钥在多租户 API 上



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

该应用程序的结构是这样的,例如有一个中央域example.com,有权访问此域的用户称为"超级管理员",他们应该能够使用他们的 API 令牌(由 Sanctum 在登录时颁发)访问所有其他子域(或租户)API,不受限制地访问。

租户位于子域(如tenant.example.com)上,并具有个人数据库,每个租户一个。

我正在考虑实现这一点的几种解决方案:

  1. 让超级管理员模拟租户 API 的管理员并以该管理员的身份执行操作
  2. 找到一种方法,向在每个租户(子域)上运行的超级管理员颁发"主密钥">

我会倾向于第二种解决方案,因为我发现它更优雅。我一直在网络上搜索此类问题/功能的最佳实践,但我没有找到与我的问题完全匹配的任何内容。

总之,解决方案2可行吗?如果是这样,有没有办法用庇护所发出这样的"万能钥匙"?

我正在使用:

拉拉维尔 8.48.1

Lighthouse-php 作为通过 Laravel 为 GraphQL 服务的框架

圣所作为身份验证守卫

Laravel的租赁作为多租户套餐

主密钥

一个简单的想法:你可以为Sanctum代币设置代币能力。也许您可以创建master:access或类似的东西的能力,作为Master key?您可以在为超级用户创建 API 令牌时授予他们master:access能力。

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

模拟用户

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

最新更新