【问题标题】:Restrict access to entire website限制对整个网站的访问
【发布时间】:2015-08-27 22:48:30
【问题描述】:

如何限制对我网站的根文件夹和所有子文件夹的访问?我有一个使用 Identity 进行身份验证的 ASP.Net Webforms 应用程序。用户将为他们创建帐户。当用户访问网站时,他们首先应该看到的是登录页面。我已经尝试了 Location 标签中的“/”、“~/”、“”、值,以及 web.config 文件中根本没有 location 标签,但这些都没有产生预期的结果。

   <location path="/">
    <system.web>
      <authorization>
        <allow users="user1@mydomain.com"/>
        <deny users="*"/>
      </authorization>
    </system.web>
   </location>

   <system.web>
    <authentication mode="None"/>
    <compilation debug="true" targetFramework="4.5.2"/>
    <httpRuntime targetFramework="4.5.2"/>
    <pages>
      <namespaces>
        <add namespace="System.Web.Optimization"/>
        <add namespace="Microsoft.AspNet.Identity"/>
      </namespaces>
      <controls>
        <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt"/>
      </controls>
    </pages>
    <membership>

【问题讨论】:

    标签: asp.net authentication webforms asp.net-identity


    【解决方案1】:

    删除&lt;location&gt; 元素并尝试以下配置:

    <system.web>
        <authentication mode="Forms">
            <forms name="FormsAuth" loginUrl="/your-login-path" /> 
        </authentication>
        <authorization>
            <deny users="?"/>
        </authorization>
        ....
    </system.web>
    

    根据您的环境/设置等,您可能需要对 &lt;forms&gt; 元素进行进一步调整,但这应该可以帮助您。


    编辑

    以上不适用于 ASP.Net Indentity。我可以让它工作的唯一方法是在根和子文件夹web.config 中为每个页面创建单独的&lt;location&gt; 元素,根据需要明确拒绝或允许用户。

    <location path="Default.aspx">
        <system.web>
          <authorization>
            <deny users ="?"/>
          </authorization>
        </system.web>
    </location>
    
    <system.web>
        <authentication mode="None"/>
        ...
    </system.web>
    

    【讨论】:

    • 布伦特,非常感谢。我在 web.config 中添加了以下元素,并收到错误消息“HTTP 错误 404.15 - 未找到请求过滤模块配置为拒绝查询字符串过长的请求。” ' '
    • @user3720699 错误告诉你问题是什么...查询字符串太长...查询字符串是什么样的?您是否收到多个重定向?尝试通读以下内容,看看您的解决方案有何不同:google.co.nz/…
    • 布伦特,谢谢您的回复。你是对的,查询字符串很大。它看起来像是在一个循环中,附加到查询字符串中,添加帐户、登录和返回 url 信息。在查看您建议的搜索中出现的结果时,我注意到我正在远离我想做的一件事,即使用 ASP.Net Identity 进行身份验证。我要进行这些更改的路径是简单的表单身份验证。我想重新使用 Identity。
    • @user3720699 抱歉,我可能用这个答案给你指出了错误的方向......我已经做了更多的尝试,似乎让它工作的唯一方法是添加个人&lt;location&gt; 每个页面的元素,这似乎代表 MS 有点疏忽,但我猜他们更关注 MVC 实现
    • 布伦特,没问题。我很感激你的意图。我同意您对 元素的必要使用以及 MC 可能对 MVC 的关注的看法。我最终做的是将所有自定义文件和文件夹放在根级别的文件夹中。然后我在 元素中标识了该文件夹。这仍然留下了一些清理工作,我仍在使用 Account 文件夹下的文件。我认为我所做的是一种解决方法,所以我没有将其归类为答案。
    【解决方案2】:

    在你的 Root Web.Config 添加:

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

    在您的帐户/Web.Confing 添加:

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

    这对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 2014-10-19
      • 2019-11-17
      • 2022-08-04
      • 1970-01-01
      • 2011-07-03
      • 2021-01-16
      相关资源
      最近更新 更多