如何使用FormsAuthentication授予对URL的匿名访问权限?

Bri*_*ton 21 forms-authentication

在大多数情况下,我的webapp需要身份验证才能执行任何操作.有一些页面,即主页,我希望人们无需身份验证即可访问.

具体来说,我想允许匿名访问这些网址:

/home 
/default.aspx
Run Code Online (Sandbox Code Playgroud)

我正在使用asp.net MVC和FormsAuthentication.两个网址都指向同一个视图:

/home/index.aspx
Run Code Online (Sandbox Code Playgroud)

这是我在web.config中的当前配置.

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />      
</authentication>
<authorization>           
  <deny users="?" />      
</authorization>
Run Code Online (Sandbox Code Playgroud)

阅读授权标签的文档,它说"配置Web应用程序的授权,控制客户端对URL资源的访问".看起来我应该能够使用授权标签来指定URL并允许访问.

就像是:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />      
</authentication>

<authorization>           
  <deny users="?" />      
</authorization>

<authorization url="/default.aspx">           
  <allow users="?" />      
</authorization>

<authorization url="/home">           
  <allow users="?" />      
</authorization>
Run Code Online (Sandbox Code Playgroud)

Bri*_*ton 41

我讨厌回答我自己的问题,但既然我最终搞清楚了,我想我会分享知识.

使用location标记并按正确的顺序放置allow和deny标记.

location标记可用于配置特定的url资源.在我的情况下,我想特别配置一些网址和文件夹.

这开始没有用,因为我没有正确的顺序允许/拒绝.根据MSDN,"授权模块授予或拒绝访问URL资源,具体取决于找到的第一个访问规则是允许还是拒绝规则."

在我的情况下,我需要首先放置所有公共的东西(default.aspx,home,样式,图像,脚本),然后我拒绝其他一切.我在最后一个位置标签上遗漏了路径.这使它适用于所有文件和子文件夹.

最终结果,用户可以到达主页,提取图像和样式,但是其他一切必须登录.

这是我的web配置文件:

<!--AUTHORIZATION AND AUTHENTICATION RULES-->
  <location path="default.aspx">
    <system.web>

      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>

  </location>

  <location path="Home">
    <system.web>

      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>

  </location>

  <location path="Styles">
    <system.web>

      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>

  </location>

  <location path="Scripts">
    <system.web>

      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>

  </location>

  <location path="images">
    <system.web>

      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>

  </location>

  <location allowOverride="true">
    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="~/Account/LogOn" timeout="2880" slidingExpiration="true" />
      </authentication>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>

  <!--END AUTHORIZATION AND AUTHENTICATION RULES-->
Run Code Online (Sandbox Code Playgroud)

  • 为什么谦虚和CW?如果您最终回答自己的问题并发布解决方案,那么您不仅要帮助自己,还要帮助自己.要自豪并接受检查.感谢您的参与. (13认同)