为什么在下面的示例中包含 < denyusers = “ ?”/> ?

?通配符代表未经身份验证的用户,而 *代表所有经过身份验证和未经身份验证的用户。我的书展示了下面的 URL 授权示例:

<authorization>
<deny users="?" />
<allow users="dan,matthew" />
<deny users="*" />
</authorization>


但是,上面的代码是否具有与下列代码相同的效果:

<authorization>
<allow users="dan,matthew" />
<deny users="*" />
</authorization>

或者作者也包括 <deny users="?" />规则是有原因的?

138345 次浏览

”在运行时,授权模块从最本地的配置文件开始迭代 allow 和 deny 元素,直到授权模块找到适合特定用户帐户的第一个访问规则。然后,授权模块根据找到的第一个访问规则是允许规则还是拒绝规则,授予或拒绝对 URL 资源的访问权。默认的授权规则是。因此,默认情况下,除非另有配置,否则允许访问。”

MSDN上的文章

deny = * means deny everyone
deny = ? means deny unauthenticated users

在你的第一个例子中,拒绝 * 不会影响到 Dan Matthew 因为他们已经被前面的规则所允许了。

根据文档,这两个规则集没有区别。

示例1是使用表单身份验证的 asp.net 应用程序。这是互联网应用程序的常见做法,因为用户在针对某些安全模块进行身份验证之前是未经身份验证的。

示例2是使用 Windows 身份验证的 asp.net 应用程序。Windows 身份验证使用 ActiveDirectory 对用户进行身份验证。将阻止访问您的应用程序。我在内部网应用程序中使用这个特性。

NET 优先授予对配置文件的访问权。在潜在冲突的情况下,首先发生的赠款优先。那么,

deny user="?"

拒绝访问匿名用户。然后

allow users="dan,matthew"

授予对该用户的访问权限。最后,它拒绝接触任何人。所有人都知道了,除了 Dan Matthew 无权进入。

编辑为 add: 并且正如@Deviant 指出的那样,拒绝对未经身份验证的访问是毫无意义的,因为最后一个条目也包含未经身份验证的内容。讨论这个话题的博客文章可以在 萨卡大师的博客找到

看看这两个链接:

拒绝授权元素(ASP.NET 设置架构) Http://msdn.microsoft.com/en-us/library/vstudio/8aeskccd%28v=vs.100%29.aspx

Allow Element 用于授权(ASP.NET 设置架构) : Http://msdn.microsoft.com/en-us/library/vstudio/acsd09b0%28v=vs.100%29.aspx