wcf中的模拟
目前,我正在使用一个由Asp.net MVC应用程序使用的WCF服务 出于安全原因,我使用表示用户名和密码的guid。(当用户登录时,WCF检查active directory中的凭据,并在数据库表中创建一条记录,该记录将guid与用户名和密码连接起来) 当用户使用另一个服务时,我会在标头中发送此guid。 我想使用此guid在wcf中模拟用户。 我尝试了以下方法(使用authorizationManager),但没有效果wcf中的模拟,wcf,security,windows-authentication,impersonation,Wcf,Security,Windows Authentication,Impersonation,目前,我正在使用一个由Asp.net MVC应用程序使用的WCF服务 出于安全原因,我使用表示用户名和密码的guid。(当用户登录时,WCF检查active directory中的凭据,并在数据库表中创建一条记录,该记录将guid与用户名和密码连接起来) 当用户使用另一个服务时,我会在标头中发送此guid。 我想使用此guid在wcf中模拟用户。 我尝试了以下方法(使用authorizationManager),但没有效果 public class MyAuthBehaviour :Servi
public class MyAuthBehaviour :ServiceAuthorizationManager
{
public override bool CheckAccess(OperationContext operationContext, ref Message message)
{
var index = operationContext.IncomingMessageHeaders.FindHeader("identifier", "");
if (index >= 0)
{
string identifier = operationContext.IncomingMessageHeaders.GetHeader<string>(index);
AddWindowsID(identifier);
}
return true;
}
private void AddWindowsID(string identifier)
{
WindowsIdentity wid = AccountBL.GetWindowsIdentity(identifier);
wid.Impersonate();
}
}
公共类MyAuthBehavior:ServiceAuthorizationManager
{
公共覆盖布尔检查访问(OperationContext OperationContext,ref消息)
{
var index=operationContext.IncomingMessageHeaders.FindHeader(“标识符”,即“”);
如果(索引>=0)
{
字符串标识符=operationContext.IncomingMessageHeaders.GetHeader(索引);
AddWindowsID(标识符);
}
返回true;
}
私有void AddWindowsID(字符串标识符)
{
WindowsIdentity wid=AccountBL.GetWindowsIdentity(标识符);
wid.Impersonate();
}
}
我确实获得了WindowsIdentity,但我无法模拟。
有办法做到这一点吗
简而言之:我想在WCF中的用户使用标头中的guid进入实际的服务方法之前模拟该用户
当wid.Impersonate()命中时,客户端抛出以下异常:
由于内部错误,服务器无法处理该请求。
有关错误的详细信息,请启用
IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute
或从中的服务器上的配置行为)
命令将异常信息发送回客户端,或打开
根据Microsoft.NET Framework SDK文档和
检查服务器跟踪日志
WCF继续运行。(尽管WCF服务中存在其他异常)
执行wid.Impersonate()时不会引发异常,它发生在我们离开MyAuthBehavior类时执行调用wid.Impersonate()时会发生什么?它会引发异常吗?如果是,什么?如果不是,您如何知道“我不能模拟”?添加了一些关于异常的额外信息,这不是基础异常-只是服务调用引发异常时WCF在客户端通道堆栈中创建的一般错误消息。正如消息所说,您应该打开WCF跟踪以查看服务端的真正异常。您是对的。问题不是模仿。早些时候,我在试验messagecontracts。这和我在这里做的不太吻合。当我改变这一点时,模仿很有效。