0

目前,我正在使用 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,但我无法模拟。有没有办法做到这一点?

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

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

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

WCF 继续运行。(尽管 WCF 服务中存在其他例外情况)

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

4

0 回答 0