我们正在开发基于浏览器的Intranet应用程序。所有用户都有活动目录帐户,因此显而易见的选择是使用集成Windows身份验证。但是会有多个用户访问相同的客户端计算机,因此我们决定使用基于表单的身份验证(但针对AD进行身份验证)。
在这种情况下,在我的ASP.NET应用程序(IIS)和WCF服务(另一台服务器IIS 7)之间进行身份验证的最佳方法是什么。我不想使用asp.Net兼容模式或证书。
我正在考虑创建另一个域帐户来验证ASP.NET和WCF。我还将有关当前ASP.NET用户的信息作为标头信息传递给WCF。这是正确的方法吗?以下代码将从ASP.NET调用以访问并获取每个服务方法。
// Call WCF service from ASP.NET Application using a new domain account for each call.
proxy.ClientCredentials.Windows.ClientCredential.Domain = "mydomain";
ServiceReference.HelloWorldClient proxy = new ServiceReference.HelloWorldClient();
proxy.ClientCredentials.Windows.ClientCredential.UserName = "new_domain_account";
proxy.ClientCredentials.Windows.ClientCredential.Password = "password";
有没有更好的方法从ASP.NET验证WCF?
谢谢, 灰分。
答案 0 :(得分:3)
向WCF服务验证ASP.NET应用程序没有什么特别之处。所有正常的身份验证选项都可用(用户名,X.509,窗口)。
这里有趣的是,您还希望传递基于浏览器的客户端凭据。这是一种称为可信子系统的已知模式。是的,只要邮件受到保护(加密),你就可以在标题中传递这些内容。
答案 1 :(得分:1)
这听起来好像不是WCF问题,而是浏览器透明验证的问题。
尝试在IIS中为ASP.NET应用程序禁用Windows集成身份验证,并切换到基本身份验证或摘要式身份验证。这两个仍将针对AD进行身份验证,但浏览器不会透明地验证登录用户。
然后在您的ASP.NET应用程序中,让它使用模拟并将IIS知道的任何凭据传递给您正在调用的WCF服务。
答案 2 :(得分:1)
我根本不知道ASP.NET,但我已经完成了一些WCF,我认为你需要做的是获取“表单登录”然后在当前线程中模拟用户,然后启动WCF与其他服务器的连接。请查看this article on msdn,以便快速了解一些纯粹在WCF中的内容。我不知道你将如何将它集成到ASP.NET端(就像我说的,我对该技术一无所知),但从概念上讲,我认为这是你必须要做的。
答案 3 :(得分:0)
无论如何,微软在这里有很多关于这个问题的信息:
http://wcfsecurity.codeplex.com/wikipage?title=Application%20Scenarios&referringTitle=Home
检查出来。