我写了一段自定义中间件来检查用户是否有特定的声明(需要使用该应用程序)。如果用户没有,我将返回422无法处理。不过我注意到,如果不提供令牌,则会收到422而不是401。如果我检查自定义中间件上的IsAuthenticated属性,则当您不提供令牌时它为false,如果您提供令牌,则为true。 >
以下是我从Startup.cs进行的配置。您会注意到UseAuthentication()发生在UseClaimsValidationMiddleware()(我的自定义中间件)之前。
我对请求管道的理解是
身份验证将触发。如果用户未通过身份验证(使用Auth0的承载者令牌(jwt)),则中间件将短路并返回401。
如果用户通过了身份验证,它将进入我的自定义中间件,并检查声明是否存在。如果没有,中间件将短路请求并返回422。
如果声明确实存在,它将传递到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();
}