【问题标题】:MVC How do I get the authorization node of web.config to use ADFS claims for ELMAHMVC 如何获取 web.config 的授权节点以对 ELMAH 使用 ADFS 声明
【发布时间】:2014-09-22 21:14:29
【问题描述】:

我有一个使用 ADFS 2.0 发出声明的现有 MVC 应用程序。

声明是由数据库而不是活动目录组发出的,因此没有使用 ClaimTypes.Role 命名空间(我可能会对其进行编辑,以便他们这样做)。

在任何情况下,我都需要编写某种转换(可能在 HttpModule 中,因为我认为操作过滤器在请求过程中为时已晚),如果它存在,将采用“my-namespace:Administrator”声明,并且把它变成一个可以在我的网络配置的 elmah 部分进行测试的角色。我假设我需要的只是让声明与 ClaimsPrincipal 的 IsInRole 方法一起工作

<location path="elmah">
<system.web>
  <authorization>
    <allow roles="Administrator"/>       
    <deny users="*"/>
  </authorization>
</system.web>

或者设置一个路由约束来检查我目前从 ADFS 获得的声明是否更容易

【问题讨论】:

    标签: c# asp.net-mvc-4 elmah adfs2.0


    【解决方案1】:

    我最终写了一个动作过滤器

    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");
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-07
      • 2017-09-10
      • 2011-09-28
      • 2016-04-28
      • 2014-03-15
      • 2016-09-27
      • 1970-01-01
      • 2014-02-20
      • 2014-07-05
      相关资源
      最近更新 更多