配置库应用程序的安全性

为库应用程序配置基于角色的安全性和身份验证时,有一些特殊注意事项。

启用或禁用身份验证

要考虑的因素之一是库应用程序的调用方是否应进行托管进程的进程级别安全性检查,即是启用还是禁用身份验证。

例如,如果库应用程序将由浏览器托管,则可能需要接收未经身份验证的回调。 为了满足这一需求,可以禁用身份验证,这样托管进程就不会对库应用程序的调用方执行安全检查。 禁用身份验证时,库应用程序实际上未经身份验证,对库应用程序的所有调用都将成功。 库应用程序的调用方无需进行托管进程的安全性检查。 实际上,库应用程序标记为“未经身份验证”,因此对于对库应用程序的调用,将省略安全性检查。

有关如何启用或禁用身份验证的信息,请参阅为库应用程序启用身份验证

强制实施角色检查

另一个决定是库应用程序是否应使用基于角色的安全性。 如果使用基于角色的安全性,则必须对要执行的任何访问检查使用组件级别安全性。分配给库应用程序的角色不会反映在进程安全描述符中。 库应用程序可以控制的唯一授权是在组件级别。 有关组件级别安全性的详细信息,请参阅安全边界

若要了解如何设置组件级别安全性,请参阅设置访问检查的安全级别

配置方案

若要更好地了解确定库应用程序是否应使用基于角色的安全性以及库应用程序是否应未经身份验证的影响,请考虑以下方案:

  • 身份验证已启用,并且使用基于角色的安全性。 在此方案中,托管进程会进行安全检查,并且某些调用方在进程级别被拒绝访问。 此外,角色检查在库应用程序级别完成,以便在角色成员身份检查时拒绝通过进程级别安全检查访问库应用程序的调用方。 这是使用基于角色的安全性的 COM+ 库应用程序的常见方案。

    下图显示了启用身份验证和使用角色检查的方案。

    Diagram that shows the authentication taking place within a host process.

  • 身份验证已启用,但未使用基于角色的安全性。 在此方案中,安全检查是在进程级别完成的,但在库应用程序级别不会检查角色成员身份。 因此,通过进程级别安全检查使库应用程序的任何调用方都有权访问库应用程序,因为未检查角色成员身份。 当将不使用基于角色的安全性的 COM 应用程序迁移到 COM+ 库应用程序时,会出现这种情况。

    下图显示了启用身份验证和未使用角色检查的方案。

    Diagram that shows the process level authentication for a library application within the host process.

  • 身份验证已禁用,并且使用基于角色的安全性。 在此方案中,在进程级别执行安全检查,但库应用程序的调用方未经身份验证。 实际上,库应用程序的调用方无需进行进程级别安全检查。 由于启用了角色检查,因此仅角色成员身份决定了谁有权访问库应用程序。 当托管进程完成的安全检查过于严格,但需要对库应用程序或特定接口或方法有一些访问限制时,此方案可能适用。 此方案使您能够有效地关闭进程安全性,并且仍然使用基于角色的安全性检查适当的级别访问。

    下图显示了禁用身份验证并正在使用角色检查的方案。

    Diagram that shows 'check for role membership' in a library application within a host process.

  • 身份验证已禁用,并且未使用基于角色的安全性。 在此方案中,安全检查仍在进程级别完成,但与前面的方案一样,库应用程序的调用方始终传递此安全检查。 由于角色检查也处于禁用状态,因此不会在库应用程序级别检查角色成员身份。 实质上,任何人都可以调用库应用程序。 当 COM 对象需要接收未经身份验证的回调时,应选择此方案,就像 Internet Explorer 和 Microsoft 管理控制台管理单元托管的 ActiveX 控件一样。 当然,在接收未经身份验证的调用时,必须信任此 COM 对象的行为适当。 例如,它不应代表其调用方访问任意文件。

    下图显示了禁用身份验证且未在使用角色检查的方案。

    Diagram that shows calls to a library application that are unauthenticated within the host process.

确定是启用还是禁用 COM+ 库应用程序的身份验证后,请参阅为库应用程序启用身份验证,了解说明如何使用组件服务管理工具禁用(或启用)身份验证的分步过程。 如果库应用程序将使用基于角色的安全性,请参阅配置基于角色的安全性

库应用程序安全性