.Net Core 2.1自定义中间件与身份验证的问题

时间:2018-12-19 14:53:07

标签: asp.net-core-middleware

我写了一段自定义中间件来检查用户是否有特定的声明(需要使用该应用程序)。如果用户没有,我将返回422无法处理。不过我注意到,如果不提供令牌,则会收到422而不是401。如果我检查自定义中间件上的IsAuthenticated属性,则当您不提供令牌时它为false,如果您提供令牌,则为true。 >

以下是我从Startup.cs进行的配置。您会注意到UseAuthentication()发生在UseClaimsValidationMiddleware()(我的自定义中间件)之前。

我对请求管道的理解是

  1. 身份验证将触发。如果用户未通过身份验证(使用Auth0的承载者令牌(jwt)),则中间件将短路并返回401。

  2. 如果用户通过了身份验证,它将进入我的自定义中间件,并检查声明是否存在。如果没有,中间件将短路请求并返回422。

  3. 如果声明确实存在,它将传递到UseMvc()中间件并实际运行该应用程序。

我真的很困惑为什么会这样,任何想法/指针都将不胜感激:)

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseSwagger();

        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "Test");
            c.RoutePrefix = string.Empty;
        });

        app.UseAuthentication();

        app.UseClaimsValidationMiddleware();

        app.UseMvc();
    }

0 个答案:

没有答案