自定义授权过滤器在ReExecute上获取重复的身份

时间:2017-07-04 08:32:45

标签: c# asp.net authorization asp.net-core-mvc .net-core

我在dotnet核心中使用自定义授权过滤器,但我注意到了一个特殊性。

OnAuthorization方法有一个上下文,其中包含登录用户的身份,在我的用例中应该是一个。这在我的应用程序中运行良好,但是我随后使用app.UseStatusCodePagesWithReExecute(...);app.UseExceptionHandler(...);配置了错误页面,并且每当触发这些错误页面时,即如果发生错误,那么在OnAuthorization内容中具有重复的身份

我不确定这是否是dotnet核心中的错误,或者有一些我没有完全正确配置的设置。添加的第二个身份似乎与我期待的身份重复。

Startup.cs:

services.AddMvc(options =>
{
    // identifies users on POP Forums actions
    options.Filters.Add(typeof(MyAttribute));
});

MyAttribute.cs:

public void OnAuthorization(AuthorizationFilterContext context)
{
    var claimsCount = context.HttpContext.User.Identities.Count();
    if (claimsCount > 1)
    {
        var oops = "Something went wrong";
    }

    ...
}

1 个答案:

答案 0 :(得分:0)

aspnet / Security GitHub网站上有关于此错误的issue。出现此问题是因为错误处理中间件在同一个HttpContext之上重放请求,并合并身份。

ASP.NET Core 2.0应该解决此问题,因为它使用单个身份验证中间件。

同时可能的解决方法是获得第一个身份:

User.Identities.FirstOrDefault();