【问题标题】:Programmatically check if page requires authentication based on web.config settings以编程方式检查页面是否需要基于 web.config 设置的身份验证
【发布时间】:2011-12-29 00:42:45
【问题描述】:

我想知道是否有一种方法可以根据 web.config 设置检查页面是否需要身份验证。基本上如果有这样的节点

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

然后我想检查任何页面是否需要身份验证,如果它在帐户目录下则返回 true。这可能吗?

【问题讨论】:

  • 您不能只用 XmlDocument 解析 web.config 并查找您要查找的设置吗?还是我误解了你的意图?
  • 如果 asp.net 已经这样做了,我宁愿不要通过再次读取配置来增加额外的开销/启动时间。
  • 您是否正在寻找一种从您的 asp.net 应用程序访问 web.config 的方法?
  • 我已阅读您的评论,但这并不能回答问题。我会改写:您是否正在寻找一种方法来根据 ASP.NET 读取的内容访问 web.config 中设置的设置?
  • 是的。我希望有一些隐藏的属性或方法可以做到这一点,比如我可以得到的 Page.RequiredAuthentication 属性。

标签: c# asp.net web-config forms-authentication


【解决方案1】:

解决方案是创建一个匿名身份(主体),并将其传递给CheckUrlAccessForPrincipal 方法。它将确定页面是公开的,还是需要身份验证。

见下面的代码:

var principal = new GenericPrincipal(new GenericIdentity(String.Empty, String.Empty), new string[]{});
bool requiredAuthentication = UrlAuthorizationModule.CheckUrlAccessForPrincipal(Page.AppRelativeVirtualPath, principal, Request.HttpMethod);

【讨论】:

    【解决方案2】:

    您是否正在检查用户请求的页面?它不太可能,因为请求永远不会到达页面。检查 url 授权工作流程。

    http://www.asp.net/web-forms/tutorials/security/membership/user-based-authorization-cs

    【讨论】:

    • 你的前提是错误的。您假设用户从未登录。在这种情况下,他们将被重定向到登录页面(并且永远不会进入需要身份验证的页面)。如果他们已登录,则假设他们可以访问任何页面...我仍然想在每个页面上确定他们是否需要登录
    • 好的,也许在每个页面上,您都可以使用 UrlAuthorizationModule.CheckUrlAccessForPrincipal 方法传入匿名用户并检查响应? msdn.microsoft.com/en-us/library/…
    • 这行得通。如果有人想要复制意大利面,我会将代码发布在单独的答案中。谢谢!
    【解决方案3】:

    我对您的确切要求有点困惑,但是要使用您的 web.config 逐页强制执行身份验证,您需要这样的东西:

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

    如果您需要更精细,则需要将逻辑添加到中间层,然后检查页面加载或 url 请求(如果是 MVC)。

    【讨论】:

    • “将逻辑添加到中间层”?什么?
    • 哪个逻辑,中间层在哪里?两者都不清楚。
    • 好的。 . .all 应有的尊重,但我从来没有被问过“中间层在哪里”。我想我的意思是堆栈中间的那个。在服务器上。 . .呃。 . 。在中间。 “逻辑”是指根据访问所需的权限嗅探请求的页面所需的逻辑。也许我在这里遗漏了一些东西。毕竟我来自美国东南部。 . .
    • 当然,但是这个问题(根据定义)不是关于中间层的逻辑吗?
    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多