我在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";
}
...
}
答案 0 :(得分:0)
aspnet / Security GitHub网站上有关于此错误的issue。出现此问题是因为错误处理中间件在同一个HttpContext之上重放请求,并合并身份。
ASP.NET Core 2.0应该解决此问题,因为它使用单个身份验证中间件。
同时可能的解决方法是获得第一个身份:
User.Identities.FirstOrDefault();