asp.net - ASP.NET web.config 授权 403 错误
问题描述
管理员到新的 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 运行时不会呈现任何页面,而是会继续处理管道,直到它到达结束请求事件。这是您检查 401 是否引发的地方,如果是,则将 401 替换为 200 并重定向到登录页面。
取决于上面这听起来是否困难,您可以让它快速工作,或者您需要一些时间来编写这样的授权模块。如果您需要进一步的建议,请留言。
推荐阅读
- python - 在数据框中定期更改值
- facebook - 新的 Facebook Graph API - 嵌入照片
- python - 如何在 argparse 中混合共享和独占参数
- powershell - 使用 pdftk 拆分 pdf(已关闭)
- excel - VBA - 将一个工作表中的两列与另一工作表中的两列进行比较
- java - 如何在可绘制的 xml 中并排创建两个矩形?
- pandas - Seaborn FacetGrid(散点图)跳过 NaN 值
- vue.js - “idle-vue”:“^2.0.5”,不检测页面滚动事件
- python - update matplotlib figure dynamically
- javascript - 如何使我的滑块在最后一张幻灯片上不显示空白幻灯片