ASP.NET Core中的授权.始终401未授权[授权]属性

DiP*_*Pix 16 c# asp.net authorization bearer-token asp.net-core

我第一次在ASP.NET Core中创建Authorization.我从这里使用教程TUTORIAL

问题是当我从邮递员发送请求时:

Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6I...
Run Code Online (Sandbox Code Playgroud)

用[Authorize]属性修饰的控制器中的方法.

401 Unauthorized总是收到...我看到了教程的评论,似乎有些人也有类似的问题.我不知道如何解决这个问题.

eug*_*ecp 20

在 ASP.NET Core 3.0 中,我遇到了同样的问题,对我有用的是:

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
Run Code Online (Sandbox Code Playgroud)

在 StartUp.Configure 方法中。

此文档显示了中间件组件的典型排序:https : //docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.0


DiP*_*Pix 19

应其他人的要求,答案是:

问题在于Startup.cs中的中间件顺序

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ConfigureAuth(app); // your authorisation configuration

    app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)

为什么中间件订单很重要?如果我们app.UseMvc()先放- 然后MVC操作将进入路由,如果他们看到Authorize属性,他们将控制其处理,这就是我们收到401 Unauthorized错误的原因.

我希望它可以帮助某人;)

  • 如果您使用的是ASP.NET Core 3.0预览,请将“ UseMvc”与“ UseRouting”交换。 (2认同)
  • 就我而言,我忘记在 `app.UseMvc()` 之前添加 `app.UseAuthentication()`,这可能是上面的 `ConfigureAuth(app)` 所调用的 (2认同)

小智 8

如果您使用的是 ASP.NET Core 3.0

检查此订单

app.UseAuthentication();

app.UseRouting(); //必须在下面 app.UseAuthentication();

如果您使用的是 ASP.NET Core < 3.0

只需更换app.UseRouting();app.UseMvc();

IE:

app.UseAuthentication();

app.UseMvc(); //必须在下面 app.UseAuthentication();