提问人:CarComp 提问时间:3/23/2017 最后编辑:CarComp 更新时间:3/23/2017 访问量:26
<location path=“something” 比较如何工作?
How does the <location path="something" comparison work?
问:
我正在尝试使用某些旧版本的 Windows Identity Foundation 修复旧站点的问题。我遇到的问题之一是,由于它不是 MVC 站点,我无法对控制器操作进行身份验证。我们的网站刚刚在每个页面上强制进行身份验证,包括所有设置如下的页面......
<location path="Syndication.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
因为我们有
<system.web>
<authentication mode="None" />
<authorization>
<deny users="?" />
</authorization>
设置,使 WIF 正常工作。
因此,我只能在 global.asax 中编写这样的巨型杂物,以尝试“读取”web.config 并神圣化每个项目的授权级别。<Location>
private void Application_AuthenticateRequest(object sender, EventArgs e)
{
HttpApplication htApp = (HttpApplication)sender;
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConfigurationLocationCollection section = config.Locations;
foreach (ConfigurationLocation location in section)
{
Configuration rootConfiguration = location.OpenConfiguration();
PropertyInformationCollection props = rootConfiguration.GetSection("system.web/authorization").ElementInformation.Properties;
foreach (PropertyInformation prop in props)
{
AuthorizationRuleCollection arc = prop.Value as AuthorizationRuleCollection;
if (arc == null) continue;
foreach (AuthorizationRule rule in arc)
{
if (!rule.ElementInformation.IsPresent || rule.Users[0] != "*") continue;
if (htApp.Request.CurrentExecutionFilePathExtension != null)
{
// Clean up the current request name
string tmp = htApp.Request.CurrentExecutionFilePath;
if (!string.IsNullOrEmpty(htApp.Request.CurrentExecutionFilePathExtension))
{
tmp = tmp.Replace(htApp.Request.CurrentExecutionFilePathExtension, string.Empty);
}
if (tmp.StartsWith("/"))
{
tmp = tmp.Remove(0, 1);
}
// something has to make sense at some point
// figure out how to compare this to
if (tmp.Contains(location.Path) || location.Path.Contains(tmp))
{
HttpContext.Current.SkipAuthorization = true;
}
}
}
}
}
}
这可行,但它可能有安全漏洞,并且有可怕的代码气味。而且我真的不能提交它进行代码审查,因为每个人都会嘲笑并认为我是个白痴。
我需要知道如何在 web.config 中获取由 确定的布尔值,并且我需要在身份验证操作发生之前找到一些在 global.asax 中执行此操作的方法。<location path="something">
如何确定当前 url 的路径是否与 web.config 中的路径“等效”?<location path
编辑:我希望能得到我想要的东西,但它都是空的。this.Context.Request.RequestContext.RouteData
答: 暂无答案
评论