Вход в веб-API ASP.NET Core 6 на основе сеанса выдает ошибку 404 на конечной точке [Authorize]. В чем может быть проблем ⇐ C#
Вход в веб-API ASP.NET Core 6 на основе сеанса выдает ошибку 404 на конечной точке [Authorize]. В чем может быть проблем
Я добавляю систему входа пользователей на основе сеансов в серверную часть моего проекта ASP.NET Core 6 (веб-API). Я настроил его, и при тестировании с помощью почтальона моя конечная точка входа возвращает файл cookie сеанса, и он сохраняется. Когда я затем пытаюсь достичь конечной точки GET, украшенной атрибутом [Authorize], она выдает 404.
До этого я настроил систему на основе JWT, и когда токен не был включен в запрос, он выдавал мне 401 или 402, как и ожидалось, поэтому я не знаю, почему он мне выдает 404 теперь с настройкой сеанса. Я подтвердил, что конечная точка работает нормально, когда атрибут [Authorize] удален. Мой код настроен следующим образом:
Program.cs
// Службы идентификации builder.Services.AddDefaultIdentity(options => {}) .AddEntityFrameworkStores() .AddDefaultTokenProviders(); // Токены сеанса builder.Services.AddSession(опции => { options.Cookie.Name = "SessionCookie"; options.IdleTimeout = TimeSpan.FromMinutes(60); options.Cookie.HttpOnly = правда; options.Cookie.IsEssential = правда; }); builder.Services.AddAuthentication(опции => { options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; }).AddCookie(); // Далее вниз после builder.Build() приложение.UseSession(); приложение.UseAuthentication(); // ДОЛЖЕН идти перед UseAuthorization() приложение.UseAuthorization();
BrDataServiceController.cs
пространство имен BrDataService.Controllers { //[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] //[Авторизация(AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)] [Апиконтроллер] [Маршрут("API")] общедоступный класс BrDataServiceController: Контроллер { частный BrSubmitFormService _sf; общедоступный BrDataServiceController (конфигурация IConfiguration, BrSubmitFormService sf) { _сф = сф; } публичный индекс IActionResult() { вернуть просмотр(); } [Авторизовать] [HttpGet("Применить")] общедоступная асинхронная задача Get() { строковый токен = HttpContext.Session.GetString("SessionToken"); строка cookie = HttpContext.Session.GetString("SessionCookie"); Console.WriteLine("SessionToken: " + токен); Console.WriteLine("SessionCookie: " + cookie); вернуть просмотр(); } ... Вы можете видеть, что вместо этого я экспериментировал с использованием атрибута [Authorize] вверху (на уровне контроллера), но, похоже, он не имеет никакого значения по сравнению с атрибутом непосредственно в методе.
Я подозреваю, что, возможно, что-то происходит за кулисами, связанное с самим атрибутом Authorize, тем более что GET, похоже, работает (и выводит эти строки на консоль, хотя переменные токена и cookie пусты), когда атрибут удален; и поскольку все это работало нормально, когда я использовал реализацию JWT, в том числе при наличии атрибута Authorize.
Чего я ожидал Я ожидал, по крайней мере, код 401 или 402, если, возможно, что-то не так с моей реализацией файлов cookie сеанса, но не 404. Это действует так, как будто конечная точка даже не существует, пока существует атрибут Authorize.< /п>
Я добавляю систему входа пользователей на основе сеансов в серверную часть моего проекта ASP.NET Core 6 (веб-API). Я настроил его, и при тестировании с помощью почтальона моя конечная точка входа возвращает файл cookie сеанса, и он сохраняется. Когда я затем пытаюсь достичь конечной точки GET, украшенной атрибутом [Authorize], она выдает 404.
До этого я настроил систему на основе JWT, и когда токен не был включен в запрос, он выдавал мне 401 или 402, как и ожидалось, поэтому я не знаю, почему он мне выдает 404 теперь с настройкой сеанса. Я подтвердил, что конечная точка работает нормально, когда атрибут [Authorize] удален. Мой код настроен следующим образом:
Program.cs
// Службы идентификации builder.Services.AddDefaultIdentity(options => {}) .AddEntityFrameworkStores() .AddDefaultTokenProviders(); // Токены сеанса builder.Services.AddSession(опции => { options.Cookie.Name = "SessionCookie"; options.IdleTimeout = TimeSpan.FromMinutes(60); options.Cookie.HttpOnly = правда; options.Cookie.IsEssential = правда; }); builder.Services.AddAuthentication(опции => { options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; }).AddCookie(); // Далее вниз после builder.Build() приложение.UseSession(); приложение.UseAuthentication(); // ДОЛЖЕН идти перед UseAuthorization() приложение.UseAuthorization();
BrDataServiceController.cs
пространство имен BrDataService.Controllers { //[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] //[Авторизация(AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)] [Апиконтроллер] [Маршрут("API")] общедоступный класс BrDataServiceController: Контроллер { частный BrSubmitFormService _sf; общедоступный BrDataServiceController (конфигурация IConfiguration, BrSubmitFormService sf) { _сф = сф; } публичный индекс IActionResult() { вернуть просмотр(); } [Авторизовать] [HttpGet("Применить")] общедоступная асинхронная задача Get() { строковый токен = HttpContext.Session.GetString("SessionToken"); строка cookie = HttpContext.Session.GetString("SessionCookie"); Console.WriteLine("SessionToken: " + токен); Console.WriteLine("SessionCookie: " + cookie); вернуть просмотр(); } ... Вы можете видеть, что вместо этого я экспериментировал с использованием атрибута [Authorize] вверху (на уровне контроллера), но, похоже, он не имеет никакого значения по сравнению с атрибутом непосредственно в методе.
Я подозреваю, что, возможно, что-то происходит за кулисами, связанное с самим атрибутом Authorize, тем более что GET, похоже, работает (и выводит эти строки на консоль, хотя переменные токена и cookie пусты), когда атрибут удален; и поскольку все это работало нормально, когда я использовал реализацию JWT, в том числе при наличии атрибута Authorize.
Чего я ожидал Я ожидал, по крайней мере, код 401 или 402, если, возможно, что-то не так с моей реализацией файлов cookie сеанса, но не 404. Это действует так, как будто конечная точка даже не существует, пока существует атрибут Authorize.< /п>
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Получение ошибки 400 при попытке отправить POST к конечной точке в веб-API C# ASP.NET Core.
Anonymous » » в форуме C# - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-