是否可以集成外部权限服务器?

问题描述 投票:1回答:1

我已经使用Ory Keto实现了RBAC,以根据令牌的声明管理用户的权限。我使用Ory Oathkeeper作为反向代理,使用Ory Hydra对用户进行身份验证,并使用Ory Keto进行授权。现在,我想将这些服务与Firebase / Firestore集成。

我认为将Ory Hydra(认证服务器)与Firebase / Firestore集成是可能的,因为它可以集成Auth0(https://auth0.com/blog/developing-real-time-apps-with-firebase-and-firestore/)。也就是说,我认为可以使用Hydra的访问令牌(OAuth2)或OpenId令牌(JWT)来创建自定义firebase令牌,并使用后者来授权访问(创建firebase规则)。

我想知道是否可以在Firebase授权过程中使用Ory Keto的角色。换句话说,如果可以在firebase中集成外部权限服务器以授予访问权限。

firebase google-cloud-firestore firebase-security-rules
1个回答
1
投票

无法从Firestore的安全规则中调用您的第三方授权服务器,因为其性能无法预测。

您可以做的是使您的Firestore安全规则中的第三方授权服务器中的信息可用。有两种常见的方法:

  1. 在用户的身份验证配置文件中将信息作为自定义声明提供。
  2. 在Firestore内部提供信息。

这些任务中的任何一个都必须从受信任的代码执行,因此必须在受信任的环境中运行,例如您的开发计算机,您控制的服务器或云功能。

您通常会将信息放在自定义声明中,如果它很小并且不太可能经常更改(因为自定义声明可能需要一些时间才能传播)。例如:用户是否是管理员通常是一次性更改,并且非常适合自定义声明。然后,您可以使用以下内容访问安全规则中的自定义声明:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.token.admin == true;  
    } 
  }
}

如果授权信息更大或更易变,则将该信息存储在数据库本身中更为常见。然后,您可以在安全规则中使用以下内容访问它:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if exists(/databases/$(database)/documents/AuthorizedUsers/$(request.auth.id))
    } 
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.