【问题标题】:Custom Authorization Filter getting duplicate identities on ReExecute自定义授权过滤器在重新执行时获取重复身份
【发布时间】:2017-12-07 15:03:33
【问题描述】:

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

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

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

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

    ...
}

【问题讨论】:

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


    【解决方案1】:

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

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

    与此同时,一种可能的解决方法是获取第一个身份:

    User.Identities.FirstOrDefault();
    

    【讨论】:

      猜你喜欢
      • 2018-12-11
      • 2012-02-27
      • 2013-11-01
      • 2022-01-05
      • 2017-06-10
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 2016-07-14
      相关资源
      最近更新 更多