从ASP.Net MVC验证对WCF / Web服务的调用

时间:2010-08-20 21:24:09

标签: wcf web-services authorization

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

1 个答案:

答案 0 :(得分:1)

我从问题中假设您不关心到达WCF服务的结束(MVC)用户ID (换句话说,您不需要特定的经过身份验证的用户点击WCF,这样你就可以得到那个特定用户的ID(即你知道joeBobUser点击了WCF))。您只是想确保用户经过身份验证并获得使用该站点的授权。您不需要对MVC应用程序的每个潜在用户进行身份验证/授权。

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

  • 将您的MVC应用程序作为特定的已知用户帐户运行(即在IIS中设置应用程序池以运行域用户,例如yourdomain \ youMvcAccount)而不是默认的asp帐户。如果您尚未以域用户身份运行mvc应用程序,那么有很多站点都会提供有关如何实现此目标的说明。
  • 将WCF服务端点配置绑定设置为WsHttp 。同样,许多网站都描述了如何做到这一点。这是通过GUI完成的one(我更喜欢手动编辑配置,但无论如何)。所以现在你的WCF服务只接受安全的,经过身份验证的请求
  • 在MVC应用程序中创建您的WCF客户端代理。最简单的方法(可能不是最好的方法:分离关注点,但只是为了开始)只是添加新的Web服务并发现您的WCF端点办法。再说一次,如果你不知道怎么做,基本的东西很容易上传。
  • 现在,您的MVC应用程序将调用经过身份验证的WCF服务。但是,此时,您域中经过身份验证的任何客户端都可以调用该服务。您现在只接受经过身份验证但已获得授权的用户。从您的MVC应用程序发出的所有调用来自WCF将来自身份yourDomain \ yourMvcApp
  • 限制对#1中的身份集的授权限制(授权)经过身份验证的用户可以通过多种方式完成。 get'r'done快速方式(但不是非常灵活,因为任何更改需要重新编译)只是检查请求的身份是否与您的服务调用中的WCF服务的身份相同。或者,您可以设置更强大(同时具有更多goo)选项,例如AzMan或其他WCF身份验证规则集。同样,许多站点都有关于在经过身份验证的用户之后设置这类内容的说明。这是一篇SO question that limits authorization to a windows group帖子(我这样做 - 更灵活但你需要将该用户添加到你域中的一个组),另一篇文章更多地介绍了WCF安全性和{ {3}}访问该服务。