在wcf中假冒

时间:2012-08-28 09:10:27

标签: wcf security windows-authentication impersonation

目前我正在使用Asp.net MVC应用程序使用的WCF服务。

出于安全考虑,我使用代表用户名和密码的guid。 (当用户登录时,WCF检查活动目录中的凭据并在数据库中创建记录,该记录将guid与用户名和密码连接起来) 当用户使用其他服务时,我会在标题中发送此guid。 我想使用这个guid模仿wcf中的用户。 我已经尝试了下面的内容(使用authorizationManager),但这不起作用。

 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();
        }      
    }

我确实获得了WindowsIdentity但我无法模仿。 有没有办法做到这一点?

简而言之:我想在使用标头中的guid获取实际服务方法之前模拟WCF中的用户。

当wid.Impersonate()命中时,客户端会抛出此异常:

  

由于内部错误,服务器无法处理请求。   有关错误的更多信息,请打开   IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute   或者来自服务器上的配置行为)   命令将异常信息发送回客户端,或打开   根据Microsoft .NET Framework SDK文档进行跟踪   检查服务器跟踪日志。

WCF继续运行。(尽管WCF服务中已经存在其他异常)

执行wid.Impersonate()时不抛出异常,当我们离开MyAuthBehaviour类时会发生异常

0 个答案:

没有答案