79

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

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


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

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

<deny users="?" />或者作者是否出于某种原因也包括 规则?

4

4 回答 4

95

ASP.NET 优先授予配置文件的访问权限。在潜在冲突的情况下,第一个发生的授权优先。所以,

deny user="?" 

拒绝匿名用户的访问。然后

allow users="dan,matthew" 

授予该用户访问权限。最后,它拒绝所有人访问。除了 dan,matthew 之外的所有人都被拒绝访问,这让所有人都震惊了。

编辑添加:正如@Deviant 指出的那样,拒绝未经身份验证的访问是没有意义的,因为最后一个条目也包括未经身份验证的内容。可以在以下位置找到讨论此主题的一个很好的博客条目:Guru Sarkar 的博客

于 2009-05-06T22:14:49.223 回答
41

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

MSDN上的文章

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

在您的第一个示例中,拒绝 * 不会影响 dan,matthew,因为前面的规则已经允许它们。

根据文档,您的 2 个规则集没有区别。

于 2009-05-06T22:11:15.410 回答
4

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

示例 2 适用于使用 Windows 身份验证的 asp.net 应用程序。Windows 身份验证使用 Active Directory 对用户进行身份验证。这将阻止访问您的应用程序。我在 Intranet 应用程序上使用此功能。

于 2009-05-06T22:13:07.247 回答
-1

看到这两个链接:

用于授权的拒绝元素(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

于 2013-08-19T20:54:42.360 回答