ASP.NET web.config授权403错误

问题描述 投票:0回答:1

管理新的ASP.NET Web解决方案。

web.config文件让我感到困惑,我在网上找不到类似的东西。2个问题:

看起来不错吗?

<authentication mode="Forms">
        <forms loginUrl="Authentication/SignIn.aspx" timeout="121" slidingExpiration="true" cookieless="UseCookies" />
        </authentication>
        <authorization>
            <deny users="?" />
            <allow users="*" />
        </authorization>

具体来说,在拒绝之后加上允许是否有意义?您为什么要拒​​绝然后允许所有人?

第二个问题:在web.config中,我们允许未经身份验证的用户访问以下页面。

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

我需要允许访问特定的查询参数,以防止未经身份验证的用户看到403错误。

示例:www.abc.com/?value=Test

<location path="?value=Test">
    <system.web>
        <authorization>
            <allow users="?" />
        </authorization>
    </system.web>
</location>

这是行不通的,这没想到。问题是我有www.abc.com重定向到登录页面的普通客户端,并且运行正常。但是我有使用查询参数将它们路由到其特定登录页面的SSO客户端。

asp.net webforms
1个回答
0
投票

具体来说,在拒绝之后加上允许是否有意义?您为什么要拒​​绝然后允许所有人?

是的,在这里很有意义。请注意,此处使用了两个不同的通配符。

?表示匿名但尚未验证的请求

*表示任何请求,已认证或未认证

按顺序检查规则。

两者以这种特定顺序,使引擎仅重定向未通过身份验证的请求,但传递任何其他(=这里:已通过身份验证的)请求。

我需要允许访问特定的查询参数,以防止未经身份验证的用户看到403错误。

如果您需要任何请求uri上的此查询参数,那么您不走运。这在这里不容易,因为您已经有了上面定义的两个规则。这两个将始终有效,并且没有简单的(声明性)方式可以解决此问题

<deny users="?" />

有条件地,基于查询字符串参数。

但是我有使用查询参数将其路由到其特定登录页面的SSO客户端。

有道理,但是您可能应该重新设计您的方法。

如果我理解正确,您希望这两个规则始终有效,但是如果在uri上放置了特定的查询字符串参数,则您希望关闭这两个规则。

我将在这里执行我的自定义授权模块,该模块将替换authorization中的web.config规则。

对于任何发送到登录页面和错误页面之外的任何未经身份验证的请求,

此授权模块将从管道中的授权请求事件中引发401状态代码。这两个例外(登录和错误)与您对授权如何工作的定义一致。但是,如果找到查询字符串参数,则可以跳过此操作。

因为在执行处理程序之前在管道中引发401,所以ASP.NET运行时将不呈现任何页面,但将继续处理管道,直到到达end request事件为止。在这里检查是否引发了401,如果是,则将401替换为200,然后重定向到登录页面。

取决于以上内容是否听起来很困难,您可以使它快速运行,或者需要一些时间来编写这种授权模块。如果您需要其他建议,请放下笔记。

© www.soinside.com 2019 - 2024. All rights reserved.