我已经使用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中集成外部权限服务器以授予访问权限。
无法从Firestore的安全规则中调用您的第三方授权服务器,因为其性能无法预测。
您可以做的是使您的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))
}
}
}