Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用ELMAH.MVC.allowedRoles AppSettings保护ADFS中的ELMAH声称支持MVC 4应用程序_Asp.net Mvc_Asp.net Mvc 4_Elmah_Elmah.mvc - Fatal编程技术网

Asp.net mvc 使用ELMAH.MVC.allowedRoles AppSettings保护ADFS中的ELMAH声称支持MVC 4应用程序

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 for MVC支持以下appsettings配置

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中的其余筛选器中