Завершить сеанс после блокировки пользователя и вручную истечь токен доступа - PullRequest
0 голосов
/ 02 октября 2018

Я запускаю приложение ASP web API с Angular 5 приложением переднего плана, я использую ASP Identity для аутентификации.

Теперь мое приложение имеет функцию блокировки пользователи , но, поскольку я использую токены доступа, я не могу найти способ выйти из системы, как только они заблокированы, если я не использую дурную практику (упомянуто в последних строках вопроса).

Существует метод Verify в серверном приложении API, он проверяет токен доступа, если он действителен при каждом вызове службы из приложения Angular,Конечно, этот токен доступа не изменяется, когда пользователь заблокирован, поэтому пользователь продолжает доступ до тех пор, пока не истечет срок действия его токена доступа.

Как лучше всего это преодолеть?

плохая практика, которую я 'm с использованием:

  Verify() {
     var db = new ApplicationDbContext();
     var user = db.users.Where(a => a.UserName == User.Identity.Name).FirstOrDefault();

     if(!user.isActive) { return Ok("Blocked")}
     else {
        if (User.Identity.IsAuthenticated) { return Ok("Authorized"); }
        else return Ok("Not Authorized");
        }
  }

, но функция Verify вызывается много раз, поэтому поиск в базе данных каждый раз не является хорошим решением.

-> Чтобы уточнить выход в Angularприложение сначала очищает токен доступа от локальногохранилище, затем перенаправляет на страницу входа, так что это не имеет никакого отношения к Web Api

-> Скажите, пожалуйста, нужно ли уточнить какие-либо вопросы в моем вопросе

1 Ответ

0 голосов
/ 02 октября 2018

Если избегать вызовов в БД абсолютно необходимо, я бы возложил ответственность за загрузку пользователя из приложения на угловую сторону.Пожалуйста, посмотрите мой предложенный поток с использованием веб-сокетов ниже.

  1. Администратор блокирует пользователя, API получает команду блокировки для пользователя.API помечает пользователя как заблокированного в базе данных и отправляет сообщение в угловое приложение через веб-сокеты (я бы использовал сигнал R для вашей настройки), которое содержит userId.
  2. Угловое приложение проверяет, относится ли идентификатор пользователя, отправленный с API, к текущему сеансу пользователя (возможно, к хранилищу сеанса).В этом случае загрузите пользователя, очистив токен hes и выйдя из него.
  3. Если пользователь пытается войти снова, просто переместите проверку, чтобы увидеть, заблокирован ли пользователь для вашего метода входа в систему, и он /она больше не сможет войти снова.

Это помещает все ваши яйца в одну корзину, полагаясь на ваше сокетное соединение для загрузки пользователей, но устраняет обязанность API проверять каждый вызов и уменьшает дребезг вашей базы данных..

...