.net - 使用 ASP.NET 和 WCF 跨层传递用户身份

标签 .net asp.net wcf identity

我是 WCF 的新手。假设我有两个 asp.net 应用程序,一个使用 Windows 身份验证(一个 Intranet 应用程序),另一个使用表单例份验证(一个 Internet 应用程序)。我希望这两个应用程序都有一个对物理上独立的机器的服务引用,我的所有业务逻辑都将存在于其中(在 WCF 中)。所以,这个应用程序是这样的:

浏览器 --> ASP.NET --> WCF。当调用在 WCF 层结束时,我需要知道 ASP.net 获得的用户名 (User.Identity.Name)。

使用 .NET Remoting,我创建了一个自定义主体,并将其隐藏在 LogicalCallContext 中。然后使用远程服务器端的自定义远程接收器,我将当前线程主体设置为 LogicalCallContext 中的主体。

用 WCF 做这样的事情的正确方法是什么?同样,我的 WCF 服务可能只能由运行 ASP.NET 的服务帐户调用,但我需要知道该调用最终代表谁。

最佳答案

您的 WCF 服务是否对 ASP.NET 应用程序进行身份验证和信任(例如,使用 Windows 身份验证对运行 ASP.NET 应用程序的服务帐户进行身份验证)。

如果是这样,您可以考虑在自定义 SOAP header 中传递有关最终调用方的信息。

您可以使用自定义 WCF 行为隐藏应用程序代码中的血腥细节,其中 ClientMessageInspector 在客户端添加 SOAP header ,而 DispatchMessageInspector 在服务器端处理 SOAP header 。

关于.net - 使用 ASP.NET 和 WCF 跨层传递用户身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1715338/

相关文章:

asp.net - 设置 IIS7.5 进行本地 ASP.Net 开发

c# - WCF 操作行为 : ApplyDispatchBehavior not being called

c# - 如何调试 WCF 服务?

wcf - 在包含 webHttp 和 wsHttp 的 VS2010 中添加服务引用时出错

c# - 如何设置 .NET WindowsAuthentication - 当我希望它使用实际用户时,名称总是显示为 "IIS APPPOOL\Classic .NET AppPool"

c# - 控制任务的实际并发性

.net - 关于 ASP.NET MVC 和下拉列表的问题

c# - 如何升级 Entity Framework 5 Code First 的 DataAnnotations

c# - Windows文件夹路径困惑

c# - 如何将值传递到 C# 中的图像按钮单击事件?