2010-08-20 74 views
0

这里的基本问题(我认为),我希望有人能指出我朝着正确的方向。我不太了解WCF,但我想创建一个Web服务,以便从ASP.Net MVC应用程序调用。目标是确保只有经过授权的ASP.Net用户(我们使用表单身份验证)才能调用Web服务,而不仅仅是任何人。那里有教程,我可以看看如何解决这个问题?非常感谢。从ASP.Net MVC验证对WCF/Web服务的调用MVC

+0

你的问题描述了两种不同的情况。从ASP.NET MVC调用的Web服务意味着您的服务器端代码调用Web服务。在这种情况下,您可以控制对调用代码的访问只有授权的ASP.NET用户调用Web服务意味着浏览器调用该服务(AJAX)。你需要哪种情况? – 2010-08-20 21:30:48

+0

我们仍然在感受我们通过可能性的方式,所以任何一种情景都是开放的(或者两者兼而有之!)对不起,我不能更具体,我基本上是想知道什么是可能的。 – larryq 2010-08-23 18:11:32

回答

1

我从这个问题假设你不在乎什么结束(MVC)用户ID是击中WCF服务(换句话说,你不需要一个特定的认证用户击中WCF所以你可以得到这个特定用户的ID(即你知道joeBobUser命中WCF))。你只是想确保用户通过身份验证和授权使用该网站。你不需要你的MVC应用程序的每个潜在用户都被认证/授权。

只要是真的,那么我的方法是如下:

  • 运行你的MVC应用程序作为一个特定的已知用户账号(即建立在应用程序池IIS来运行域用户,例如yourdomain \ youMvcAccount)而不是默认的asp帐户。如果您尚未以域用户的身份运行您的mvc应用程序,有很多网站会提供有关如何实现此目的的说明。
  • 设置你的WCF服务端点配置WsHttp结合。再次,许多网站描述如何做到这一点。这里的one,它通过GUI(我更喜欢手动编辑配置,但不管)。所以,现在你的WCF服务将只接受安全认证请求
  • 建立在MVC应用程序的WCF客户端代理。这样做最简单的方法(可能不是最好的:关注的分离,但只是开始)只是添加新的Web服务,并以这种方式发现你的WCF端点。再一次,如果你不知道如何做到这一点,那么基本的东西很容易被人看到。现在
  • 你的MVC应用程序将作出调用验证的WCF服务。但是,此时,在您的域中通过身份验证的任何客户端都可以调用该服务。您现在只接受已认证但已获得授权的用户。从你的MVC应用程序命中WCF发出的呼叫将被从身份YOURDOMAIN \ yourMvcApp
  • 限制授权,在#1限制(授权)设置身份验证的用户可以做多种方式。 get'r'done快速方式(但不是很灵活,因为任何更改都需要重新编译)只是检查请求的身份与您的服务调用中直接使用的WCF服务的身份相同。或者,您可以设置更强大的(同时具有更多傀儡)选项,如AzMan或其他WCF验证规则集。同样,许多网站都有指示,在您拥有经过身份验证的用户后设置这类事情。这里是一个SO question that limits authorization to a windows group的文章(我会这样做 - 更灵活,但你需要将该用户添加到你的域中的一个组),另一篇文章更详细地介绍了WCF安全性和allowing only a specific user访问服务。
  • +0

    我同意除了WsHttpBinding。你为什么选择那个? – 2010-08-20 22:01:04

    +0

    你知道,现在你提到它了,我想它并不重要,只是它是最常见的安全绑定,因此很容易在Web上找到示例/帮助。在我的店里,我们需要kerberos,因为我们负载均衡,但这是一种我不想试图说明如何实现这一点的痛苦。 – 2010-08-20 22:04:49

    +0

    如果您希望服务将通过Internet调用,而不是WSHttpBinding是不错的选择,但是在Intranet中调用服务的情况下,我会选择其他服务。但是这个问题没有指定如何调用服务,所以WSHttpBinding可能是不错的选择。 – 2010-08-22 20:35:39