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



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

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

)。

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

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

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

  1. 将信息作为用户身份验证配置文件中的自定义索赔提供。
  2. 使信息本身内部可用。

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

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

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))
    } 
  }
}

最新更新