Перенаправление идентификатора сетевого ядра ASP на отказ в доступе при выходе из системы

#c# #asp.net-core #asp.net-core-identity

#c# #asp.net-core #asp.net-core-identity

Вопрос:

Я работаю с ASP.NET Основная идентичность. Мое приложение настроено так, чтобы требовать проверки подлинности пользователей во всем мире, а авторизация на основе ролей устанавливается для контроллеров и методов действий по мере необходимости. На моем контроллере учетной записи, который я установил [Authorize(Roles = "Admin"] , и на действие выхода из контроллера учетной записи, которое я использовал [Authorize] , ожидая, что все авторизованные пользователи смогут получить доступ к действию выхода из системы. Но с [Authorize(Roles = "Admin"] установленным на контроллере пользователь перенаправляется на маршрут отказа в доступе при выходе из системы, если он / она не находится в admin role , но если [Authorize(Roles = "Admin"] он закомментирован, это работает как для пользователей, так admin и non admin для пользователей. Как я могу разрешить всем авторизованным пользователям доступ к действию выхода из системы? ниже приведен мой код

 [Authorize(Roles = "Admin")]
public class AccountController : Controller
{

    /*
    Rest of Code
    */

    [HttpPost, Authorize]
    public async Task<IActionResult> Logout()
    {

    }
}
  

Комментарии:

1. Зачем разрешать функцию выхода из системы? Если кто-то не вошел в систему, это должно действовать как отказ

2. Вы могли бы просто сделать Logout() поддержку действий анонимной [Anonymous] , тогда, если пользователь не вошел в систему, это было бы просто не-операцией.

3. Я подумал, что это может быть угрозой безопасности…… Спасибо вам обоим!

Ответ №1:

Как говорит Мартин Мартин Костелло, вы можете добавить [AllowAnonymous] атрибут в метод выхода из системы.

Насколько я знаю, атрибут метода действия [AllowAnonymous] не повлияет на действия другого контроллера. Таким образом, этот метод будет безопасным.

Затем вы могли бы поместить приведенные ниже коды внутри метода выхода из системы:

     [AllowAnonymous]
     public async Task<IActionResult> Logout(string returnUrl = null)
    {
        await _signInManager.SignOutAsync();
        _logger.LogInformation("User logged out.");
        if (returnUrl != null)
        {
            return LocalRedirect(returnUrl);
        }
        else
        {
            return RedirectToPage();
        }
    }
  

Ответ №2:

удалить [Авторизовать] из действия выхода