我已经与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中以授予访问权限。
答案 0 :(得分:1)
无法从Firestore的安全规则中调出第三方授权服务器,因为这样做的性能无法预测。
您可以做的是在Firestore安全规则内提供来自第三方授权服务器的信息。有两种常见方法:
这两项任务中的任何一项都必须从受信任的代码执行,因此必须在受信任的环境中运行,例如开发计算机,您控制的服务器或Cloud Functions。
如果信息很小且不太可能经常更改,则通常会将其放入自定义声明中(因为自定义声明可能需要一些时间才能传播)。例如:用户是否是管理员通常是一次性更改,非常适合自定义声明。然后,您可以使用以下内容访问安全规则内的自定义声明:
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))
}
}
}