Авторизация в 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();