如何在运行时拒绝匿名访问路径

时间:2012-01-24 17:01:36

标签: asp.net authentication configuration webforms

我有一个多语言.Net 4 webforms网站(www.example.com/en/,www.example.com/fr/等),每种语言都有一个成员区,例如: www.example.com/en/members/和www.example.com/fr/members /

CMS(Umbraco)可以控制语言分支和内容,因此可以控制添加或删除它们。这意味着我无法使用root web.config中的<location>部分拒绝匿名访问每个成员分支,因为它们可能在应用程序启动后发布。

有没有办法在应用程序启动后将ConfigurationLocation部分添加到Locations实例的System.Configuration.Configuration属性,而无需重新启动应用程序?或者,是否有更灵活的方法来控制运行时的路径访问?

2 个答案:

答案 0 :(得分:1)

  

或者,是否有更灵活的方法来控制路径访问   运行

您可以在BasePage

中扩展Page_Load event内所有类似内容的安全页面
if(!HttpContext.Current.User.Identity.IsAuthenticated)
   Response.Redirect("Login.aspx");

<强>更新

如果您不知道哪些页面将受到保护,请更改上面的代码以从数据库表中读取需要保护的页面,并将当前页面名称与表格中列出的页面名称进行比较。例如,您可以捕获列表并每20分钟自动使缓存过期。至少你可以将页面标记为安全,无需重新启动应用程序,同时保持一定的灵活性,而不需要事先知道哪些应该是安全的。

答案 1 :(得分:0)

我使用的解决方案是创建一个HttpModule。但是使用umbraco中的HttpModule,您无法轻松检索currentNodeId,因为它是作为不同进程的一部分添加的。

该模块对PostAuthenticateRequest事件进行了以下检查:

  1. 请求的路径是否是umbraco中的保留路径?
  2. 用户是否已经过身份验证?
  3. 如果这两个都返回false

    1. 使用请求域,我通过查找具有匹配的关联域的节点来检索根节点ID;
    2. 然后,我使用所请求路径的部分创建了一个xpath查询,但该节点存在于上面检索到的id的节点下面。这个查询给了我当前的节点;
    3. 然后检查当前节点是否作为标记为需要身份验证的节点的后代存在。