Vic*_*orV 3 c# asp.net security wcf interop
我有2个申请; 一个是ASP.NET 3.5 Ajax应用程序(客户端),另一个是WCF Web应用程序(BackEnd).
应用程序部署在IIS 7上的单独Windows Server 2008中.后端应用程序启用了net.tcp和http绑定; 某些服务在netTcpBinding下公开,其他服务在basicHttpBinding下公开; 绑定没有配置任何安全性.
客户端应用程序使用FormsAuthentication对用户进行身份验证.netTcpBinding下的所有服务都在客户端应用程序中使用.在后端,我需要知道哪个用户调用服务来进行一些审计任务.这可能吗?
如果您实际上并不希望通过后端服务实现安全性,并且只是希望能够审核用户身份(意味着您实际上是TRUST向谁发送该身份信息),您可以考虑通过自定义标头传递身份信息每个请求.
为此,您可以创建一个自定义IClientMessageInspector,通过在其BeforeSendRequest实现中通过HttpContext.Current.User.Name之类的内容从当前ASP.NET上下文中提取信息来添加标头.要将IClientMessageInspector附加到客户端代理,您只需创建一个IEndpointBehavior,然后通过config将其添加到端点(请参阅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);
}
Run Code Online (Sandbox Code Playgroud)
在服务器端,您可以通过实现IDispatchMessageInspector并在那里进行审计来考虑通用审计.或者您可以在可能希望通过OperationContext :: IncomingMessageHeaders属性使用它的方法中"手动"检索标题.
| 归档时间: |
|
| 查看次数: |
1037 次 |
| 最近记录: |