这可以通过IIS完成吗?我知道我可以通过IIS限制IP地址,但是我也可以使用用户名/密码?
在IIS之外还有其他办法可以使用C#.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身份验证,那么我非常建议使用它,因为它是真正的最简单的设置选项。但是,如果您的服务正在通过互联网访问,那么Windows的身份验证并不是真正的选择,您需要从网络标准中进行选择。其中最简单的是Basic Authentication,但是您应该仅使用SSL,因为用户名/密码未加密(仅base64编码)。下一步是Digest authentication,它不需要SSL,因为用户名/密码是使用MD5哈希发送的。为了最终,您可以与SSL v3一起向您向API的每个用户发出特定的客户端证书。
现在,为安全性选择哪个选项决定了还需要做什么。如果选择Windows安全性,则将以下元素添加到< system.web>我们从第1步开始的元素:
<authentication mode="Windows" />
其余的安全协议将需要更多的工作。 ASP.NET不提供对Basic,Digest或SSL v3的内在支持。从技术上讲,您可以利用IIS为您执行此类型的身份验证,但它总是映射到Windows用户。如果这是一个选项,那么只需将< authentication mode =“Windows”/>元素并配置IIS。但是,如果这不是一个选项,因为您根本无法控制IIS / ActiveDirectory,或者需要对自定义用户数据库进行身份验证,那么这意味着您需要连接自定义HttpModule来提供对这些安全性的支持协议。
步骤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管理该组中的哪些用户。但是,该功能也适用于非Windows身份验证,假设您使用的安全性实现通过其IPrincipal实现来暴露角色。