管理新的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客户端。
具体来说,在拒绝之后加上允许是否有意义?您为什么要拒绝然后允许所有人?
是的,在这里很有意义。请注意,此处使用了两个不同的通配符。
?
表示匿名但尚未验证的请求。
*
表示任何请求,已认证或未认证。
按顺序检查规则。
两者以这种特定顺序,使引擎仅重定向未通过身份验证的请求,但传递任何其他(=这里:已通过身份验证的)请求。
我需要允许访问特定的查询参数,以防止未经身份验证的用户看到403错误。
如果您需要任何请求uri上的此查询参数,那么您不走运。这在这里不容易,因为您已经有了上面定义的两个规则。这两个将始终有效,并且没有简单的(声明性)方式可以解决此问题
<deny users="?" />
有条件地,基于查询字符串参数。
但是我有使用查询参数将其路由到其特定登录页面的SSO客户端。
有道理,但是您可能应该重新设计您的方法。
如果我理解正确,您希望这两个规则始终有效,但是如果在uri上放置了特定的查询字符串参数,则您希望关闭这两个规则。
我将在这里执行我的自定义授权模块,该模块将替换authorization
中的web.config
规则。
此授权模块将从管道中的授权请求事件中引发401状态代码。这两个例外(登录和错误)与您对授权如何工作的定义一致。但是,如果找到查询字符串参数,则可以跳过此操作。
因为在执行处理程序之前在管道中引发401,所以ASP.NET运行时将不呈现任何页面,但将继续处理管道,直到到达end request事件为止。在这里检查是否引发了401,如果是,则将401替换为200,然后重定向到登录页面。
取决于以上内容是否听起来很困难,您可以使它快速运行,或者需要一些时间来编写这种授权模块。如果您需要其他建议,请放下笔记。