从 ASP.NET 应用程序验证 WCF 服务
Posted
技术标签:
【中文标题】从 ASP.NET 应用程序验证 WCF 服务【英文标题】:Authenticating WCF Service from ASP.NET application 【发布时间】:2012-02-19 20:37:35 【问题描述】:我正在开发一个 ASP.NET Web 应用程序,该应用程序将访问托管在同一 IIS 中的 WCF 服务,ASP.NET 站点将在该 IIS 中托管以与数据层进行通信。
ASP.NET 站点通过根据存储在 sql 数据库中的用户名和密码对用户进行身份验证来进行表单身份验证。
由于 WCF 服务托管在 Internet 上,我想防止未经授权访问 WCF 服务,即只有通过 ASP.NET 站点成功验证的用户才应该被允许访问 WCF 服务。
如果未经授权的用户像http://test.com/service/userservice.svc一样直接访问WCF服务或尝试添加服务引用,它应该抛出异常。
如何做到这一点?
【问题讨论】:
【参考方案1】:在生产中,您可能希望完全关闭元数据交换(除非您的 aspnet 代码动态生成代理,我认为它不会)。
您可以通过服务中 web.cong/app.config 中的以下设置来关闭元数据公开 - 1. 2.删除元数据端点
回到你的第二个问题—— 这取决于您在 WCF 服务中使用的绑定。如果您不公开或打算将您的服务公开给外界,则通常首选网络 TCP 绑定,因为它的性能(您可以在 IIS 7+ 中托管基于 tcp 的服务)。
考虑到它是基于 TCP 的服务,您的端点不会以任何方式暴露在端口 80 上,因此您的服务不能被任何客户端直接调用(假设您公司的防火墙只允许该 ip 上的端口 80)。您可以通过向其添加 Windows 身份验证来进一步加强服务的安全性。
我在这里做了一些假设,所以请随时恢复。
HTH
【讨论】:
我想提供更多信息 - ASP.NET 网站和 WCF 服务分别托管在同一个 IIS 中。 SSL 证书已安装在服务器中,因此将通过 HTTPS 进行通信。 ASP.NET 网站适用于表单身份验证。由于 WCF 服务位于 IIS 中并且可以在 Internet 中使用,因此我们希望防止未经授权的用户使用该服务。那么,我们该如何预防呢?我们只希望通过 ASP.NET 网站身份验证的用户访问 WCF 服务。以上是关于从 ASP.NET 应用程序验证 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 和 WCF 服务安全 - 身份验证、路由
在 WCF 服务中使用 ASP.NET 成员资格提供程序身份验证
表单身份验证、ASP.NET MVC 和 WCF RESTful 服务
Asp.Net:将数据从 WCF 服务广播到 Asp.Net 客户端的最佳方式