我有一个C#.net web服务,我需要限制访问。 我已经要求我的消费者使用一个用户名和密码来调用服务。 但是,有没有办法来限制访问的实际ASMX页和WSDL? 我需要限制的用户名/密码和IP地址访问web服务。 如果用户没有正确的凭据,我不想让他们知道在web服务存在哪些webMethods的。
可这虽然IIS做什么? 我知道我可以限制通过IIS IP地址,但我也可以使用用户名/密码?
是否有任何其他方式做到这一点IIS以外,也许使用C#.NET?
我有一个C#.net web服务,我需要限制访问。 我已经要求我的消费者使用一个用户名和密码来调用服务。 但是,有没有办法来限制访问的实际ASMX页和WSDL? 我需要限制的用户名/密码和IP地址访问web服务。 如果用户没有正确的凭据,我不想让他们知道在web服务存在哪些webMethods的。
可这虽然IIS做什么? 我知道我可以限制通过IIS IP地址,但我也可以使用用户名/密码?
是否有任何其他方式做到这一点IIS以外,也许使用C#.NET?
那么,既然它的ASMX您在您的处置整个ASP.NET运行时堆栈。
套用<location>
标记为要保护的资源。 假设它是一个ASMX文件,你可以简单地做在你的web.config如下:
<location path="MyWebService.asmx">
<system.web>
<!-- resource specific options will go here -->
</system.web>
</location>
你需要决定你如何去实际验证用户身份。 有几种方法可以做到这一点,你可以利用多种认证标准。 您需要选择最适合你的合适人选的办法。
如果你是在Intranet上,并使用Windows身份验证是我会强烈建议利用,由于它是真正得到安装最简单的选择。 然而,如果正在通过Internet访问您的服务,那么Windows authenticatio是不是一个真正的选择,你需要从网络标准来选择。 最简单的是基本身份验证 ,但你应该只因为用户名/密码是不加密的使用通过SSL(仅base64编码)。 下一步出了那是摘要式身份验证 ,因为用户名/密码,使用MD5哈希发送不需要SSL。 对于最终你可以去SSL v3的 ,你发出一个特定的客户端证书,您的API的每一个用户。
现在,你选择安全的选项决定需要做什么。 如果您选择Windows的安全性,这是因为添加以下元素到容易<system.web>
我们开始在第1步元素:
<authentication mode="Windows" />
该安全协议的剩余部分将需要更多一点的工作。 ASP.NET不提供基本,摘要或SSL V3的内在支持。 从技术上讲,你可以利用IIS做此类认证的你,但它总是会映射到Windows用户。 如果这是你的选择,那么只需将<authentication mode="Windows" />
元素并相应地配置IIS。 但是,如果这是不是一种选择,或者是因为你只需要在IIS / ActiveDirectory中无法控制,或者您需要对定制用户数据库进行身份验证,那么这意味着你需要连接一个自定义的HttpModule,为这些安全提供支持协议。
以确保资源的最简单的方法是从根本上说:“不要让任何人谁没有成功地以某种方式进入这个资源认证”。 这是使用以下授权配置完成:
<authorization>
<deny users="?" />
</authorization>
如果你想只允许特定的用户,你可以改做,而不是执行以下操作:
<authorization>
<deny users="*" />
<allow users="jdoe, msmith" />
</authorization>
另一种方法是定义角色(组)和简单地向下锁定资源,你把你要访问的资源到谁的用户特殊的作用。
<authorization>
<deny users="*" />
<allow roles="My Service Users" />
</authorization>
这也映射到Windows身份验证,因为你可以只安装一个Windows组,让您的MIS团队管理哪些用户正在使用的ActiveDirectory该组群。 然而,功能也工作得很好,对于非Windows身份验证假设你通过它的IPrincipal实现使用自曝角色的安全实施。
有两种选择:创建一个不同的端口上完全不同的网站有锁定权限。 这有“通过隐藏的安全”提供了一定量的优势(用半开玩笑的......),也可以增加你的站点下(同一端口,不同的路径),一个新的应用程序,在不同的应用程序池并分配权限的方式。
在这两种情况下,您的Web服务是不是要能够与各种ASP.NET“东西”之类的应用对象交谈(当然会,但它不会是同一个)。 部署仅仅是稍微硬一点:部署相同的二进制文件,但只包括一个Web服务的文件。
您可以鉴定一个HttpModule。 SSL + BasicAuthentication应该产生与其他工具链的最佳互操作。
在HTTP模块,你可以访问请求,可以拒绝未经授权的用户访问刚刚的.asmx请求。 即使如此,你可能让他们访问WSDL。
添加<add path="*.asmx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
到<httpHandlers>
web.config文件的部分
我不知道如何实际这是给你的,但你可以考虑升级到WCF。 WCF与ASMX Web服务完全向后兼容,并允许您控制的WSDL是否被通过定义MEX(元数据交换)端点公开。 没有MEX终结,没有WSDL。
可以停止WSDL被从Machine.config中元件移除所述文档协议所示
更新: Web服务身份验证-最佳做法? 如果用户使用用户名/密码,您可以通过HTTPS使用HTTP基本身份验证。
您也可以在一个稍微不同的充方式实现它。 你的web服务的第一个调用应的身份验证方法。 客户端验证,并接收验证令牌。 此标记应提交由Web服务公开的所有其它方法。