因此,在网上大量寻找有关 IIS 模拟工作的更多信息后,我找不到太多有用的信息。所以我开始更多地研究“黑客”它。
我正在使用它(http://custombasicauth.codeplex.com/)来允许我们使用 WCF 进行自定义基本身份验证。
这个模块的流程是LeastPrivilege.CustomBasicAuthentication.CustomBasicAuthenticationModule.OnEnter()
在建立连接时调用。这反过来调用
LeastPrivilege.CustomBasicAuthentication.CustomBasicAuthenticationModule.AuthenticateUser()最终调用
LeastPrivilege.CustomBasicAuthentication.CustomBasicAuthenticationModule.SetPrincipal(string username)
我将 SetPrincipal 更改为接受密码也是
private static void SetPrincipal(string username, string password)
在这里,我在用户名上做一个简单的 if(检查我们的域前缀)以确定用户是否是域帐户。如果它是一个域帐户,我使用他们的用户名/密码来创建一个WindowsIdentity(我使用http://www.codeproject.com/KB/dotnet/UserImpersonationInNET.aspx并进行了一些重构以获得WindowsIdentity)。如果用户不是域帐户,我会为他们使用已知的硬编码域帐户。然后我使用这个WindowsIdentity并创建一个WindowsPrincipal并将其设置为HttpContext.Current.User
所以这对我们有用。模拟正在发挥作用。作为一个副作用,我们不需要使用[OperationBehavior(Impersonation = ImpersonationOption.Required)]属性来装饰我们的 WCF 方法。我不知道这是否是“正确”的做法,但我认为它非常接近。我认为 IIS 检测到当前用户中有一个 WindowsPrincipal 并自动模拟该帐户。