簡體   English   中英

MVC如何獲取web.config的授權節點以將ADFS聲明用於ELMAH

[英]MVC How do I get the authorization node of web.config to use ADFS claims for ELMAH

我有一個使用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收到的聲明

我最終寫了一個動作過濾器

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

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM