[英]ASP.NET Impersonation by Role
我修改了ASP.NET登录控件,使其还可以指定UserRole(“ Employee”或“ Volunteer”)。 通过对我们的客户端编写的Web服务的调用来对用户进行身份验证,该服务接受用户名/密码/角色并返回true或false。
该服务器运行在Windows Server 2003上。无数的配置选择让我感到困惑,并且试图了解我的选择。
是否可能有上述多种情况?
我应该以编程方式指定模拟还是可以通过配置文件完成模拟? 如果是这样,是否需要使用LogonUser或WindowsIdentity?
我应该使用什么配置文件设置? (即,表单身份验证,模拟= true等。)
先感谢您。
因为要模拟哪个身份的决定是基于运行时数据的,所以您可能必须以编程方式处理模拟。
我使用interop和WindowsIdentity的组合来处理模拟。 我遵循的步骤是:
LogonUserA()
登录,该操作将填充IntPtr( token
)的句柄。 DuplicateToken()
复制令牌。 var identity = new WindowsIdentity(tokenDuplicate);
。 var context = identity.Impersonate();
CloseHandle()
关闭两个令牌 context.Undo();
我会安排一个一次性课程来处理细节。 步骤1-5在构造函数中发生,而步骤6在处理例程中发生。 这有助于确保即使遇到异常我也可以正确还原。
使用这种方法,由于您通过服务方法传递凭据,因此不会完全强制执行web.config身份验证方案。 但是,如果使用的是集成Windows身份验证,则可以通过编程方式从HttpContext.Current.User.Identity.Impersonate()模拟当前用户,而无需在服务方法中传递凭据。
顺便说一句 ,您可能已经知道, PInvoke.net是用于为互操作方法配置签名的宝贵资源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.