2017-07-04 39 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();