Asp.net mvc 使用ELMAH.MVC.allowedRoles AppSettings保护ADFS中的ELMAH声称支持MVC 4应用程序
ELMAH for MVC支持以下appsettings配置Asp.net mvc 使用ELMAH.MVC.allowedRoles AppSettings保护ADFS中的ELMAH声称支持MVC 4应用程序,asp.net-mvc,asp.net-mvc-4,elmah,elmah.mvc,Asp.net Mvc,Asp.net Mvc 4,Elmah,Elmah.mvc,ELMAH for MVC支持以下appsettings配置 elmah.mvc.allowedRoles elmah.mvc.allowedUsers 使用角色/用户保护elmah路由路径。显然,它可以很好地用于windows或窗体身份验证。但我无法让它用于基于声明的身份验证 有人有这方面的经验吗?我在web配置中这样做 <elmah> <security allowRemoteAccess="true" /> <errorLog type="Elm
elmah.mvc.allowedRoles
elmah.mvc.allowedUsers
使用角色/用户保护elmah路由路径。显然,它可以很好地用于windows或窗体身份验证。但我无法让它用于基于声明的身份验证
有人有这方面的经验吗?我在web配置中这样做
<elmah>
<security allowRemoteAccess="true" />
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sqlserver" applicationName="Eers.Web"/>
</elmah>
再往下
<location path="elmah">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="elmah.axd" inheritInChildApplications="false">
<system.web>
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
</system.web>
<system.webServer>
<handlers>
<add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
</handlers>
</system.webServer>
</location>
如果您注意到该节点,它的工作原理与MVC中的任何其他安全性一样。不过,它不适用于索赔。为此,您必须编写一个操作过滤器
<authorization>
<allow users="*"/>
</authorization>
这是我的Actionfilter
public class ElmahRequestAuthorizationFilter : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext.IsChildAction) return;
var controller = filterContext.RouteData.Values["controller"] as string;
if (controller != null && controller.ToLowerInvariant() != "elmah") return;
var authenticationComponent = GetAuthenticationInfo() // A method that will return us roles;
var goodRoles = new List<string> {
"TestRole",
"ThirdLevelSupport",
"Administrator"
};
var roles = authenticationComponent.Roles ?? new List<string>();
var thouShaltPass = roles.Intersect(goodRoles).Any();
if (!thouShaltPass)
{
throw new HttpException(404, "Not Found");
}
}
}
公共类ElmahRequestAuthorizationFilter:AuthorizationAttribute
{
授权时的公共覆盖无效(AuthorizationContext filterContext)
{
if(filterContext.IsChildAction)返回;
var控制器=filterContext.RouteData.Values[“controller”]作为字符串;
if(controller!=null&&controller.ToLowerInvariant()!=“elmah”)返回;
var authenticationComponent=GetAuthenticationInfo()//将返回us角色的方法;
var goodRoles=新列表{
“测试角色”,
“第三层支持”,
“管理员”
};
var roles=authenticationComponent.roles??新列表();
var=roles.Intersect(goodRoles.Any();
如果(!千HaltPass)
{
抛出新的HttpException(404,“未找到”);
}
}
}
如何注册ElmahRequestAuthorizationFilter?如何调用筛选器?由于Elmah是一个模块,您无法将该属性放在控制器或操作上?请将其添加到应用程序_Start中FilterConfig中的其余筛选器中