允许使用ASP-MVC和表单身份验证访问特定页面

时间:2008-12-04 15:29:13

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

以下是我的观点的目录布局的简单概述:

项目

  • Page 1
  • Page 2
  • RSS

问题

  • Page 1
  • Page 2
  • RSS

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

我了解您可以通过将以下页面添加到web.config

来授予对页面的访问权限
  <location path="TOURPAGE.aspx">
<system.web>
  <authorization>
    <allow users="*" />
    <allow users="?" />
  </authorization>
</system.web>

但是,我如何使用动态制作的网址执行此操作,例如:

Issues/RSS/chrisj
  • 该路径映射到一个名为RSS的问题中的控制器,该问题采用用户名并吐出其问题的RSS ...

修改

我认为已经修复了一些答案,但是:

似乎至少在我的情况下,你仍然需要身份验证cookie才能看到该页面。只要你有cookie,就可以注销并查看它。

这对我不利,我需要将页面完全公开,因为它是一个RSS提要。

5 个答案:

答案 0 :(得分:3)

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

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

它有效:)

答案 1 :(得分:3)

忘掉&lt; location&gt;&lt; allow /&gt;&lt; deny /&gt;东西......听起来你需要在行动中使用[授权]属性。

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

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

答案 2 :(得分:1)

<location path="/Issues/RSS/">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
编辑:顺便说一下,这是因为.NET假设URL转到了一个目录,上面的这个位置标记说“在'Issues / RSS'目录中的任何内容都是安全的:”

答案 3 :(得分:0)

这可能无法按预期工作。

似乎至少在我的情况下,你仍然需要身份验证cookie才能看到该页面。只要你有cookie,就可以注销并查看它。

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

答案 4 :(得分:0)

我同意Charlino的说法,[授权]标签可能会解决您的问题。

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