【问题标题】:Allowing access to specific pages with ASP-MVC and Forms Authentication允许使用 ASP-MVC 和表单身份验证访问特定页面
【发布时间】:2008-12-04 15:29:12
【问题描述】:

以下是我的视图目录布局的简单概述:

项目

  • 第 1 页
  • 第 2 页
  • RSS

问题

  • 第 1 页
  • 第 2 页
  • RSS

我正在使用表单身份验证来拒绝所有未经身份验证的用户的访问,这很好。但是,我希望能够向所有人授予对 RSS 视图的访问权限(以便他们可以通过谷歌阅读器和其他东西订阅)

我了解您可以通过将以下页面添加到您的 web.config 来授予对页面的访问权限

  <location path="TOURPAGE.aspx">
<system.web>
  <authorization>
    <allow users="*" />
    <allow users="?" />
  </authorization>
</system.web>

但是,我将如何使用动态制作的 URL 来执行此操作,例如:

Issues/RSS/chrisj
  • 该路径映射到称为 RSS 的问题中的控制器,该控制器接受用户名并吐出有关问题的 RSS...

编辑

一些我认为已经解决的答案,但是:

看来,至少在我的情况下,您仍然需要身份验证 cookie 才能看到该页面。只要您有 cookie,您就可以退出并查看它。

这对我没有好处,我需要页面完全公开,因为它是一个 RSS 提要。

【问题讨论】:

    标签: asp.net-mvc security forms-authentication


    【解决方案1】:

    忘记 的东西...听起来您需要在您的操作中使用 [Authorize] 属性。

    查看这些页面了解更多信息: http://www.asp.net/learn/mvc/tutorial-17-cs.aspx http://www.pnpguidance.net/post/ASPNETMVCFrameworkPreview4HandleErrorAuthorizeOutputCacheActionFilterAttributes.aspx

    此外,该属性也可以应用于控制器级别,因此您不必将其应用于每个单独的操作。

    【讨论】:

    • 嘿嗨,我正在做这件事,而且效果很好,但我的索引页迫使人们登录,我不希望那样。我有 [allowannonymous] 的整个类和控制器方法,但它仍然强制登录。你能帮忙吗?
    【解决方案2】:

    这实际上比我想象的要简单得多。似乎.net很聪明,我尝试了以下方法:

      <location path="Issues/RSS">
    <system.web>
      <authorization>
        <allow users="*" />
        <allow users="?" />
      </authorization>
    </system.web>
    

    它成功了:)

    【讨论】:

      【解决方案3】:
      <location path="/Issues/RSS/">
      <system.web>
      <authorization>
      <allow users="*" />
      </authorization>
      </system.web>
      </location>
      

      编辑:顺便说一句,这样做的原因是因为 .NET 假设 URL 进入一个目录,并且上面的这个位置标签说“'Issues/RSS'目录中的任何东西都是安全的:)

      【讨论】:

      • 这对我不起作用,因为它抱怨它不能以“/”结尾或开头。 “~/Issues”有效,但“/Issues”或“~/Issues/”无效。
      【解决方案4】:

      这可能无法按预期工作。

      看来,至少在我的情况下,您仍然需要身份验证 cookie 才能看到该页面。只要您有 cookie,您就可以退出并查看它。

      这对我没有好处,我需要页面完全公开,因为它是一个 RSS 提要。

      【讨论】:

        【解决方案5】:

        我同意 Charlino 的观点,即 [Authorize] 标签可能会解决您的问题。

        如果您对 RSS 和页面使用单个控制器操作(并且只是根据某些参数呈现不同的 ActionResult),您可以检查用户是否通过 HttpContext.Current.User.Identity.IsAuthenticated 进行身份验证,并在控制器中使用它决定是否继续并允许访问的操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-08
          • 1970-01-01
          • 1970-01-01
          • 2020-07-01
          相关资源
          最近更新 更多