gpt4 book ai didi

c# - 将经过身份验证的用户发送到 WCF 应用程序

转载 作者:行者123 更新时间:2023-11-30 15:12:09 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

为此,您可以创建自定义 IClientMessageInspector它通过在其 BeforeSendRequest 实现中通过诸如 HttpContext.Current.User.Name 之类的东西从当前 ASP.NET 上下文中提取信息来添加 header 。要将 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 使用它的方法中“手动”检索标题属性(property)。

关于c# - 将经过身份验证的用户发送到 WCF 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1597074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com