2017-07-04 69 views
1

我在dotnet核心中使用自定义授权过滤器,但我注意到一个特点。自定义授权筛选器获取重复身份ReExecute

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

    ... 
} 

回答

0

有一个issue在ASPNET /安全的GitHub网站上有关此错误打开。发生该问题是因为错误处理中间件在相同的HttpContext上重放请求,并合并身份。

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

在此期间可能的解决方法是只得到第一个身份:

User.Identities.FirstOrDefault();