为什么在下面的例子中包含<deny users =“?”/>?

这个? 通配符表示未authentication的用户, *表示所有用户,已authentication且未authentication。 我的书显示了以下URL授权示例:

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

但是上面的代码不会有如下效果:

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

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

ASP.NET优先从configuration文件授予访问权限。 如果发生潜在冲突,则首先发生的赠款优先。 所以,

 deny user="?" 

拒绝访问匿名用户。 然后

 allow users="dan,matthew" 

授予对该用户的访问权限。 最后,它拒绝所有人的访问。 除了丹以外,所有人都被震惊,马修被拒绝进入。

编辑添加:作为@Deviant指出,拒绝访问未经authentication是毫无意义的,因为最后一个条目也包括未经身份validation。 讨论这个主题的好博客条目可以在: Guru Sarkar的博客

“在运行时,授权模块遍历允许和拒绝元素,从最本地configuration文件开始,直到授权模块find适合特定用户帐户的第一个访问规则,然后授权模块授予或拒绝对一个URL资源,取决于第一个访问规则是允许还是拒绝规则,默认授权规则是,因此,默认情况下,除非另有规定,否则允许访问。

文章在MSDN

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

在你的第一个例子中,否认*不会影响丹,马修,因为他们已经被上述规则允许。

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

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

例2是使用windowsvalidation的asp.net应用程序。 Windows身份validation使用Active Directory来validation用户。 这将阻止访问您的应用程序。 我在Intranet应用程序上使用此function。

看到这两个链接:

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

允许元素进行授权(ASP.NET设置架构): http : //msdn.microsoft.com/en-us/library/vstudio/acsd09b0%28v=vs.100%29.aspx