使用角色进行客户端授权

可使用基于角色的安全性来建立授权策略,从而确定要允许哪个客户端或哪些客户端以及哪些颁发机构。 正在决定谁应该能够执行哪些操作和访问哪些资源。

每当用户尝试访问任何应用程序资源时,角色都会充当调用的访问控制机制来促进此目的。 角色实际上是用户列表,更确切地说,是共享相同安全特权的用户的符号类别。 为应用程序资源分配角色时,会将该资源的访问权限授予该角色的任何成员。

因此,可以定义非常特定的安全特权,方法是将其声明为角色,然后将角色分配给特定资源。 部署应用程序后,系统管理员可以使用实际用户和用户组填充角色。 应用程序运行时,COM+ 将执行角色检查来强制实施策略。

从根本上讲,角色有助于保护代码,即 COM+ 应用程序的客户端可以调用的方法。 每当客户端尝试调用应用程序中组件公开的方法时,都会检查角色成员身份。 如果调用方在分配给被调用方法或资源的角色中,则调用会成功;否则会失败。

基于角色的声明性安全性

使用基于角色的声明性安全性,可以采用管理方式声明角色(使用组件服务管理工具或 管理函数),并采用管理方式将其分配给应用程序资源。 设置声明性安全性的位置和方式将确定为应用程序绘制安全边界的位置。 有关更多详细信息,请参阅安全边界

可以将给定角色分配给整个应用程序、特定组件、组件中的特定接口或接口上的特定方法。 角色分配将沿包含的自然链向下继承,也就是说,如果将角色分配给组件,则会隐式将其分配给该组件公开的每个接口和方法。

通过方法级别角色分配的可用性,可以有效地帮助保护设计时未考虑安全性的组件和接口。 但是,如果方法本身无法通过声明性角色分配来保护,则可能需要执行编程角色检查。 在决定如何通过方法考虑业务功能时,通常最好考虑安全性;否则,可能会发现需在最后一刻添加与安全相关的代码。

有关设置基于角色的安全性的详细过程,请参阅配置基于角色的安全性

编程安全性

在某些情况下,可能希望将安全逻辑放入组件中,同时仍使用基于角色的安全性。 可能是无法或选择不通过方法来考虑所有访问决策。 例如,对于一项专用应用程序资源(可能是特定的数据库),可能希望仅允许方法的某些调用方访问,同时排除其他调用方。 或者,可能有一个 TransferMoney 方法,并希望通过限制调用方可以转移的金额来限制一些调用方。

在这种情况下,可以在代码中执行角色检查。 提供了一个简单的 API,用于检查是否启用了安全性,以及调用方或特定用户是否处于给定角色。 仅当启用了基于角色的安全性时,此功能才可用。 这意味着,仍然可以利用基于角色的声明性安全性,然后在必要时可采用编程方式将其扩展到更精细的粒度级别。

此外,使用基于角色的安全性时,可以采用编程方式访问有关组件调用链中所有上游调用方的信息。 如果要保留详细的审核记录,这尤其有用。

有关如何在代码中执行角色检查以及如何访问安全调用上下文信息的描述,请参阅编程组件安全性

授权和身份验证

有意义的授权假定确信客户端实际上是他们所说的客户端。 客户端标识的验证由身份验证服务单独处理。 如果没有身份验证,实际上是让调用方进入认可系统。 有关身份验证对 COM+ 应用程序的影响的描述,请参阅客户端身份验证

有效地设计角色

安全边界

安全调用上下文信息

安全上下文属性