asp.net身份验证方式介绍(7)

表 1 显示从各种标识属性获得的结果标识,当您的应用程序使用 Windows 身份验证且 IIS 配置为使用集成 Windows 身份验证时,可以从 ASP.NET 应用程序使用这些标识属性。

表 1:线程公开的 CurrentPrincipal Object

Web.config 设置

变量位置

结果标识


<identity impersonate="true"/>
<authentication mode="Windows" />

 

HttpContext
WindowsIdentity
线程

 

Domain\UserName
Domain\UserName
Domain\UserName

 

<identity impersonate="false"/>
<authentication mode="Windows" />

 

HttpContext
WindowsIdentity
线程

 

Domain\UserName
NT AUTHORITY\NETWORK SERVICE
Domain\UserName

 

<identity impersonate="true"/>
<authentication mode="Forms" />

 

HttpContext
WindowsIdentity
线程

 

用户提供的名称
Domain\UserName
用户提供的名称

 

<identity impersonate="false"/>
<authentication mode="Forms" />

 

HttpContext
WindowsIdentity
线程

 

用户提供的名称
NT AUTHORITY\NETWORK SERVICE
用户提供的名称

 

模拟

ASP.NET 应用程序可以使用模拟来执行操作,使用经过身份验证的客户端或特定 Windows 帐户的安全上下文来访问资源。

初始用户模拟

要模拟初始(经过身份验证的)用户,请在 Web.config 文件中使用以下配置:

<authentication mode="Windows" /> <identity impersonate="true" />

使用该配置,ASP.NET 始终模拟经过身份验证的用户,且所有资源访问均使用经过身份验证的用户的安全上下文执行。如果您的应用程序的虚拟目录上启用了匿名访问,则模拟 IUSR_MACHINENAME 帐户。

要暂时模拟经过身份验证的调用方,将 identity 元素的 impersonate 属性设置为 false, 然后使用以下代码:

using System.Security.Principal; ... // Obtain the authenticated user's identity. WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity; WindowsImpersonationContext ctx = null; try { // Start impersonating. ctx = winId.Impersonate(); // Now impersonating. // Access resources using the identity of the authenticated user. } // Prevent exceptions from propagating. catch { } finally { // Revert impersonation. if (ctx != null) ctx.Undo(); } // Back to running under the default ASP.NET process identity.

这段代码模拟经过身份验证的初始用户。在 HttpContext.Current.User.Identity 对象中维护初始用户的标识和 Windows 令牌。

固定标识模拟

如果需要在应用程序的整个生命周期中模拟相同的标识,可以在 Web.config 文件中的 identity 元素上指定凭据。以下示例显示如何模拟名为"TestUser"的 Windows 帐户。

如果使用该方法,应该对这些凭据进行加密。使用 ASP.NET 2.0,您可以使用 ASP.NET IIS 注册工具 (Aspnet_regiis.exe)。使用 ASP.NET 1.1 版,您可以使用 Aspnet_setreg.exe 实用工具。有关该实用工具的详细信息,请参阅 ?url=https://www.jb51.net/library/en-us/cptools/html/cpgrfaspnetiisregistrationtoolaspnet_regiisexe.asp。

要在 ASP.NET 应用程序中使用固定标识进行资源访问,可使用 Windows 2000 Server 或 Windows Server 2003 上的 identity 元素来配置凭据。如果正在运行 Windows Server 2003,其中的 IIS 6.0 配置为运行在辅助进程隔离模式下(默认情况),则可通过将 ASP.NET 应用程序配置为在自定义应用程序池(在特定的域标识下运行)中运行来避免模拟。然后,可以使用指定的域标识访问资源而无需使用模拟。

委托

模拟只提供对本地资源的访问。委托是一个扩展的模拟功能,它允许您使用模拟令牌访问网络资源。

如果应用程序使用 Kerberos v5 身份验证对其用户进行身份验证,则可使用 Kerberos 委托在应用程序的各层传递用户标识并访问网络资源。如果应用程序不使用 Kerberos v5 身份验证,则可使用协议转换切换到 Kerberos,然后使用委托传递该标识。

Windows Server 2003 中的约束委托需要 Kerberos 身份验证。如果您的应用程序无法使用 Kerberos 身份验证对其调用方进行身份验证,您可以使用协议转换从可选的非 Windows 身份验证模式(如,窗体或证书身份验证)切换到 Kerberos 身份验证。然后,可使用具有约束委托的 Kerberos 访问下游网络资源。

约束的和未约束的委托

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjdpyf.html