web-services - 有没有办法限制对 ASMX Web 服务(即 asmx 页面及其 WSDL)的访问?

标签 web-services security iis asmx

我有一个 C# .net Web 服务,需要限制其访问。我已经要求我的消费者使用用户名和密码来调用该服务。但是,有没有办法限制对实际 asmx 页面和 WSDL 的访问?我需要通过用户名/密码和 IP 地址限制对网络服务的访问。如果用户没有正确的凭据,我不希望他们知道 Web 服务中存在哪些 Webmethods。

这可以通过 IIS 完成吗?我知道我可以通过 IIS 限制 IP 地址,但我也可以使用用户名/密码吗?

在 IIS 之外还有其他方法可以做到这一点吗?也许使用 C#.net?

最佳答案

好吧,因为它是 ASMX,所以您可以使用整个 ASP.NET 运行时堆栈。

第 1 步 - 通过 .config 管理资源

申请<location>标记您想要保护的资源。假设它是单个 ASMX 文件,您只需在 web.config 中执行以下操作:

<location path="MyWebService.asmx">
    <system.web>
        <!-- resource specific options will go here -->
    </system.web>
</location>

第 2 步 - 验证您的用户

您需要决定如何对用户进行身份验证。有多种方法可以实现此目的,并且您可以利用多种身份验证标准。您需要选择最适合您的方法。

如果您位于 Intranet 上并且正在使用 Windows 身份验证,我强烈建议您利用它,因为它确实是最简单的设置选项。但是,如果您的服务是通过 Internet 访问的,那么 Windows 身份验证实际上并不是一个选项,您需要从 Web 标准中进行选择。其中最简单的是 Basic Authentication ,但您应该通过 SSL 使用此选项,因为用户名/密码未加密(仅采用 Base64 编码)。下一步是 Digest authentication它不需要 SSL,因为用户名/密码是使用 MD5 哈希发送的。对于终极,你可以选择 SSL v3您可以在其中向 API 的每个用户颁发特定的客户端证书。

现在,您选择的安全选项决定了还需要做什么。如果您选择 Windows 安全性,只需将以下元素添加到 <system.web> 即可轻松完成我们在第 1 步中开始的元素:

<authentication mode="Windows" />

安全协议(protocol)的其余部分将需要更多的工作。 ASP.NET 不提供对 Basic、Digest 或 SSL v3 的内在支持。从技术上讲,您可以利用 IIS 为您执行此类身份验证,但它始终会映射到 Windows 用户。如果这是您的选择,那么只需留下 <authentication mode="Windows" />元素并相应地配置 IIS。但是,如果这不是一个选项,或者因为您根本无法控制 IIS/ActiveDirectory,或者您需要针对自定义用户数据库进行身份验证,那么这意味着您需要连接一个自定义 HttpModule 来为这些安全性提供支持协议(protocol)。

第 3 步 - 保护资源

保护资源的最简单方法基本上就是:“不要让任何未通过某种方式成功验证的人进入此资源”。这是使用以下授权配置完成的:

<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 管理该组中的用户。但是,假设您使用的安全实现通过其 IPrincipal 实现公开角色,该功能也适用于非 Windows 身份验证。

关于web-services - 有没有办法限制对 ASMX Web 服务(即 asmx 页面及其 WSDL)的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1400198/

相关文章:

c# - IIS 回收时运行的任务会发生什么

java - 为多人游戏获得良好的安全性

java - Spring Security 尽管有限制但仍允许访问

java - 如何决定在 Java Web 服务中使用什么框架?(SOAP)

web-services - CXF JAXB JAXBEncoderDecoder 解码错误 : unexpected element when having qualified elements

.net - 如何在 WSE 3.0 (.NET) 中向 UsernameToken 的 Nonce 元素添加 EncodingType 属性

c# - 为什么我不能从机器外部访问我的 WCF 服务,但我可以在本地访问?

ssl - 如何调试 https 设置?

java - 如何限制 Java 应用程序中的 Web 服务使用?

web-services - openid4java ConsumerManager 请求/线程安全吗?