客户端模拟和委托

在某些情况下,服务器应用程序需要向代表客户端访问的资源提供客户端标识,这通常会导致针对客户端标识执行访问权限检查或身份验证。 在一定程度上,服务器可以按照客户端的标识进行操作(称为模拟客户端的操作)。

模拟是线程在与拥有该线程的进程的上下文不同的安全上下文中执行操作的能力。 服务器线程使用表示客户端凭据的访问令牌,并且使用此令牌可以访问客户端可以访问的资源。

使用模拟可确保服务器能够精确执行客户端可以执行的操作。 对资源的访问可能会受到限制或扩展,具体取决于客户端有权执行的操作。

连接到数据库时,可以选择让服务器模拟客户端,以便数据库可以自行对客户端进行身份验证和授权。 或者,如果应用程序访问使用安全描述符保护的文件,并使客户端能够获取对这些文件中信息的授权访问权限,应用程序可以在访问文件之前模拟客户端。

如何实现模拟

模拟需要客户端和服务器(在某些情况下,系统管理员)参与。 客户端必须指示其允许服务器使用其标识的意愿,并且服务器必须以编程方式显式假定客户端的标识。 有关详细信息,请参阅客户端模拟要求服务器端模拟要求主题。

委派级别模拟的管理要求

若要有效使用最强大的委派模拟形式(即通过网络模拟客户端),必须在 Active Directory 服务中正确配置客户端和服务器用户帐户以提供支持(除了客户端授予权限执行委派级别模拟),如下所示:

  • 必须在 Active Directory 服务中将服务器标识标记为“受信任,可委派”。
  • 客户端标识不得在 Active Directory 服务中标记为“帐户敏感,无法委派”。

这些配置功能使域管理员能够对委派进行高度控制,考虑到涉及的信任程度(以及安全风险),这是可取的。 有关委派的更多详细信息,请参阅委派和模拟

掩蔽

除了客户端通过模拟级别授予服务器的授权外,服务器的掩蔽功能在很大程度上决定了模拟的方式。 掩蔽会影响服务器代表客户端进行调用时,服务器实际呈现的标识(其自己或客户端的标识)。 有关详细信息,请参阅掩蔽

性能影响

模拟可能会显著影响性能和扩展。 模拟客户端调用通常比直接进行调用更昂贵。 以下是要考虑的一些问题:

  • 在复杂的模式中围绕标识传递的计算开销,特别是启用动态掩蔽时。
  • 在很多地方强制实施冗余安全检查的一般复杂性,而不是在中间层中集中实施。
  • 当打开模拟客户端时,无法跨多个客户端重复使用数据库连接等资源,这是一个非常大的正常扩展障碍。

有时,唯一有效的问题解决方案是使用模拟,但应该仔细权衡这一决定。 有关这些问题的进一步讨论,请参阅多层应用程序安全性

排队组件

排队组件不支持模拟。 当客户端对排队的对象进行调用时,实际上会对记录器进行调用,记录器会将其作为消息的一部分打包到服务器。 然后,侦听器从队列中读取消息并将其传递给播放器,该播放器调用实际的服务器组件并进行相同的方法调用。 因此,当服务器收到调用时,原始客户端令牌无法通过模拟获取。 但是,基于角色的安全性仍然适用,并且使用 ISecurityCallContext 接口的编程安全性将会起作用。 有关详细信息,请参阅排队组件安全性

客户端身份验证

库应用程序安全性

多层应用程序安全性

编程组件安全性

基于角色的安全管理

在 COM+ 中使用软件限制策略