我正在尝试理解在分布式系统中使用基于声明的访问控制,以及如何管理和处理它们。我认为我可能会混淆由身份验证服务发出的声明和由授权服务发出的声明。所以,如果您能帮助我澄清这一点,我将不胜感激。
场景:
我有一个受信任的联合服务器,用于多个微型站点的单点登录。每个微型站点都有特定的功能。例如,产品门户(用于创建和管理产品)和账单门户(用于创建、查看和支付发票)。
该系统由许多人使用:管理员对整个系统拥有完全掌控权。内部财务部门只关心账单门户。同样,内部产品团队只关心产品门户。最后,客户需要访问两个门户,但没有任何后端权限。
联合身份验证:
据我了解,当用户成功经过联合服务器进行身份验证时,联合服务器会向请求的微站提供有关该用户身份的声明。这些声明可能包括:
- 用户电子邮件地址: bob@example.com - 用户名: Bob - 用户类型: 产品团队 - 与用户身份相关的其他信息
它不提供任何与用户操作相关的内容(这可能是我第一个误解)。请注意,用户类型实际上是对角色的声明。这种术语是否正确?在这种情况下,声明是否与权限声明不同?
微站授权:
一旦用户经过身份验证,微站就需要知道该用户被允许做什么。虽然该站点会提供一个“用户类型”(它是对角色的声明),但我更喜欢使用基于声明的方法。这将在权限上提供更细粒度的控制。例如:
- Bob 应该能够编辑价格,但不能创建产品。 - Bill(也在产品团队中)只能添加产品。 - Ben 只能删除产品。 - Alice(财务)没有任何权限。
与角色相比,使用声明可以为微站提供额外的灵活性来授予特定的权限。
问题:
- 这些允许操作的声明应存储在哪里? - 每个微站是否应提供自己的联合身份 - 到 - 微站声明映射服务? - 每个微站是否应缓存这些声明?如果 Bob 从产品团队调到了财务部门怎么办?
场景:
我有一个受信任的联合服务器,用于多个微型站点的单点登录。每个微型站点都有特定的功能。例如,产品门户(用于创建和管理产品)和账单门户(用于创建、查看和支付发票)。
该系统由许多人使用:管理员对整个系统拥有完全掌控权。内部财务部门只关心账单门户。同样,内部产品团队只关心产品门户。最后,客户需要访问两个门户,但没有任何后端权限。
联合身份验证:
据我了解,当用户成功经过联合服务器进行身份验证时,联合服务器会向请求的微站提供有关该用户身份的声明。这些声明可能包括:
- 用户电子邮件地址: bob@example.com - 用户名: Bob - 用户类型: 产品团队 - 与用户身份相关的其他信息
它不提供任何与用户操作相关的内容(这可能是我第一个误解)。请注意,用户类型实际上是对角色的声明。这种术语是否正确?在这种情况下,声明是否与权限声明不同?
微站授权:
一旦用户经过身份验证,微站就需要知道该用户被允许做什么。虽然该站点会提供一个“用户类型”(它是对角色的声明),但我更喜欢使用基于声明的方法。这将在权限上提供更细粒度的控制。例如:
- Bob 应该能够编辑价格,但不能创建产品。 - Bill(也在产品团队中)只能添加产品。 - Ben 只能删除产品。 - Alice(财务)没有任何权限。
与角色相比,使用声明可以为微站提供额外的灵活性来授予特定的权限。
问题:
- 这些允许操作的声明应存储在哪里? - 每个微站是否应提供自己的联合身份 - 到 - 微站声明映射服务? - 每个微站是否应缓存这些声明?如果 Bob 从产品团队调到了财务部门怎么办?
我之所以问这个问题是因为我们的开发部门进行了一场辩论,我们的最高级开发人员认为联合服务器应该提供每个微网站所需的所有声明。这似乎会将联合服务与每个微网站紧密耦合。