根据web.config设置,以编程方式检查页面是否需要身份验证

4

我希望了解一下是否有一种方法可以基于web.config设置来检查页面是否需要身份验证。基本上,如果存在以下节点:

  <location path="account">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>

那么我想检查任何页面是否需要验证,并且如果它在账户目录下,则返回true。这个可行吗?


如果asp.net已经实现了这个功能,我宁愿不要通过重新读取配置文件来增加额外的开销和启动时间。 - Rush Frisby
你是否正在寻找一种从你的asp.net应用程序中访问web.config的方法? - M.Babcock
我已经阅读了您的评论,但那并没有回答问题。我来重新表述一下:您是否正在寻找一种基于ASP.NET读取的方式来访问web.config中设置的设置? - M.Babcock
是的。我希望有一些隐藏的属性或方法可以做到这一点,就像一个Page.RequiredAuthentication属性那样,我可以获取它。 - Rush Frisby
当前页面是否需要授权? - Emil G
显示剩余2条评论
3个回答

7
解决方案是创建一个匿名身份(principal),并将其传递到CheckUrlAccessForPrincipal方法中。该方法将确定页面是否为公共页面或需要身份验证。
请参见以下代码:
var principal = new GenericPrincipal(new GenericIdentity(String.Empty, String.Empty), new string[]{});
bool requiredAuthentication = UrlAuthorizationModule.CheckUrlAccessForPrincipal(Page.AppRelativeVirtualPath, principal, Request.HttpMethod);

4

你的前提是错误的。你假设用户从未登录过。在这种情况下,他们将被重定向到登录页面(并且永远不会进入需要身份验证的页面)。如果他们已经登录,则假设他们可以访问任何页面...我仍然希望在每个页面上确定是否需要他们登录。 - Rush Frisby
2
好的,也许您可以在每个页面上使用UrlAuthorizationModule.CheckUrlAccessForPrincipal方法,传递一个匿名用户并检查响应?http://msdn.microsoft.com/en-us/library/system.web.security.urlauthorizationmodule.checkurlaccessforprincipal.aspx - benni_mac_b
这个可以。如果有人想复制粘贴代码,我会在另一个答案中发布它。谢谢! - Rush Frisby

0

我有点困惑你具体在问什么,但是如果您要使用web.config在页面对页面的基础上强制进行身份验证,您需要像这样的东西:

 <location path="Forms/Administration/Default.aspx">
        <system.web>
            <authorization>
                <allow roles="Administrator, User, AdditionalUser" />
            </authorization>
        </system.web>
    </location>

如果您需要比那更详细的粒度,您需要将逻辑添加到中间层,然后在页面加载或url请求(如果使用MVC)时进行检查。

在你的中间层添加逻辑?什么意思? - spender
哪种逻辑,中间层在哪里?两者都不清楚。 - spender
好的……恕我直言,但我从未被问过“中间层在哪里”。我想我是指堆栈中间的那个。在服务器上……嗯……就在中间。而且通过“逻辑”,我指的是需要用于针对所请求的页面进行嗅探以确定所需访问权限的逻辑。也许我在这方面有所遗漏。毕竟,我原来来自美国东南部。 - Matt Cashatt
当然可以,但这个问题(根据定义)不是关于中间层逻辑的吗? - spender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接