【问题标题】:Send Authenticated User To WCF Application将经过身份验证的用户发送到 WCF 应用程序
【发布时间】:2009-10-20 20:23:14
【问题描述】:

我有 2 个申请;一个是 ASP.NET 3.5 Ajax 应用程序(客户端),另一个是 WCF Web 应用程序(后端)。

应用程序通过 IIS 7 部署在单独的 Windows Server 2008 中。后端应用程序启用了 net.tcp 和 http 绑定;一些服务暴露在 netTcpBinding 下,其他服务暴露在 basicHttpBinding 下;绑定没有配置任何安全性。

客户端应用程序使用 FormsAuthentication 对用户进行身份验证。 netTcpBinding 下的所有服务都在客户端应用程序中使用。在后端,我需要知道哪个用户调用该服务来执行一些审计任务。这可能吗?

【问题讨论】:

    标签: c# asp.net wcf security interop


    【解决方案1】:

    如果您实际上并不想在后端服务上实施安全性,而只是希望能够审核用户身份(这意味着您实际上信任向您发送该身份信息的人),您可以考虑将身份信息传递给每个请求的自定义标头。

    为此,您可以创建一个自定义 IClientMessageInspector,它通过在其 BeforeSendRequest 实现中通过诸如 HttpContext.Current.User.Name 之类的东西从当前 ASP.NET 上下文中提取信息来添加标头。要将 IClientMessageInspector 附加到您的客户端代理,您只需创建一个 IEndpointBehavior,然后通过配置将其添加到端点(请查看 the documentation for IClientMessageInspector 以获取示例代码)。

    您的 BeginSendRequest 实现可能如下所示:

    public void BeginSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel)
    {
       string currentContextUserName = HttpContext.Current.User.Identity.Name;
    
       MessageHeader userNameHeader = MessageHeader.CreateHeader("Username", "urn:my-custom-namespace", currentContextUserName);
    
       request.Headers.Add(userNameHeader);
    }
    

    在服务器端,您可以通过实施IDispatchMessageInspector 并在那里进行审核来考虑通用审核。或者,您可以在可能希望通过 OperationContext::IncomingMessageHeaders 属性使用它的方法中“手动”检索标头。

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 2016-01-17
      • 2020-11-15
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2014-07-15
      • 2011-12-22
      相关资源
      最近更新 更多