Авторизация в ASP.NET Core. Всегда 401 Неавторизованный атрибут [Авторизовать]

Впервые я создаю авторизацию в ASP.NET Core. Я использовал учебник отсюда учебник

Проблема в том, что я отправляю запрос от почтальона:

Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6I...

моему методу в контроллере, украшенном атрибутом [Authorize].

Я всегда получаю 401 Unauthorized... Я видел комментарии под этим уроком, и кажется, что у некоторых людей есть похожие проблемы. Я понятия не имею, как я могу решить эту проблему.

Ответ 1

По просьбе других здесь есть ответ:

Проблема заключалась в заказе промежуточного программного обеспечения в Startup.cs

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

    app.UseMvc();
}

Почему заказ промежуточного программного обеспечения важен? Если мы app.UseMvc() положим app.UseMvc() тогда действия MVC попадут в маршрутизацию, и если они увидят атрибут Authorize, они возьмут на себя управление его обработкой и что мы получим ошибку 401 Unauthorized.

Надеюсь, это поможет кому-то;)

Ответ 2

В моем случае я следовал учебнику по coreApi,angularClient, но каждый раз получал неавторизованную ошибку. В моем случае приложение angular работает в рамках проекта Core Api.

Итак, я изменил порядок следующим образом, и теперь он работает

   public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory)
    {

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseSpaStaticFiles();


        app.UseAuthentication();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller}/{action=Index}/{id?}");
        });


        app.UseSpa(spa =>
        {
            // To learn more about options for serving an Angular SPA from ASP.NET Core,
            // see https://go.microsoft.com/fwlink/?linkid=864501

            spa.Options.SourcePath = "ClientApp";

            if (env.IsDevelopment())
            {
                spa.UseAngularCliServer(npmScript: "start");
            }
        });


         loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        // global cors policy
        app.UseCors(x => x
            .AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials());

    }

Ответ 3

Решение для меня было проверить правильность заказа товаров среднего класса и других вещей в Configure method of Startup. Обычно app.UseMvc();