我的任务是建立一个基本的管理员应用程序。 该应用程序需要一个ASP.NET前端,它使用WCF与许多后端服务进行通信。
一个要求是使用Windows身份验证对应用程序的用户进行身份验证。如果应用程序逻辑包含在ASP.NET应用程序中,我可以做到这一点,但我不知道如何在后端WCF服务中执行身份验证?
答案 0 :(得分:3)
这取决于......(注意大部分基于HTTP / IIS作为传输,如果使用TCP或其他绑定可能会有所不同)
可以将WCF本身设置为使用当前运行的凭据来使用传输或消息安全性。
如果WCF服务(以及使用当前凭据需要与之交谈的任何内容)与ASP> NET前端位于同一个框中,您可能会没问题
...否则您可能会遇到“Double Hop身份验证”问题。基本上,Windows身份验证将在Web服务器上获得“模拟”身份,这在本地很好,但它没有权限从Web服务器进行身份验证。要做到这一点,你需要一个“委托”身份。
我知道获取委派身份的选项是Kerberos和基本身份验证。
因此,如果您说“Windows身份验证”,那么您的确意味着每个人(客户端和所有服务器)都位于同一个AD域中,您可以这样做。
答案 1 :(得分:0)
我有一个使用Windows身份验证的ASP.NET站点,需要调用启用了匿名和Windows身份验证的WCF服务。我遇到的问题是将Windows凭据传递给WCF服务。
为此,我做了以下
在网站的Web.config中,我确保我的WCF绑定使用了Windows身份验证: security mode =“TransportCredentialOnly”
传输clientCredentialType =“Windows”
在IIS中,我使用.Net 4和经典管理流水线模式创建了一个应用程序池
在我的网站身份验证设置
中匿名身份验证 - 已禁用
ASP.NET模拟 - 已启用
Windows身份验证 - 已启用
这对我有用。