Миграция с cookie на токен на предъявителя - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу перенести немного устаревший проект в современную эпоху, и я не совсем уверен, как.

У меня есть веб-приложение, которое использует куки-аутентификацию, а некоторые вещи построены поверх него.Он получает токен от внешнего провайдера аутентификации X, поэтому есть конечные точки, такие как X/login, которые показывают форму входа в систему и выполняют обратный вызов с токеном в параметрах запроса.X/verify, на который я отправляю токен в параметрах запроса, и он возвращает утверждения, если токен действителен.

Процесс входа в систему выглядит следующим образом:

  1. Новый пользователь переходит на авторизованную страницу
  2. промежуточное ПО перенаправляет на X/login, так как нет файлов cookie.
  3. поставщик проверки подлинности X вызывает конечную точку обратного вызова с токеном в моем веб-приложении после успешного входа в систему
  4. Веб-приложение проверяеттокен, получить утверждения, создает ClaimsPrincipal с использованием утверждений
  5. , выполняет вход (httpContext.SignInAsync(scheme, principal)) с использованием схемы проверки подлинности cookie по умолчанию и упомянутого принципала
  6. Проверка подлинности пользователя.

Я хочу изменить это на аутентификацию Bearer Token и иметь отдельное клиентское приложение и API, чтобы клиентское приложение перенаправляло на провайдера аутентификации, получало токен в качестве обратного вызова и использовало его для аутентификации запросов к API, а API проверял бы его с использованием аутентификацииПоставщик.

Хотя получить токен довольно просто, я не уверен, как настроить API для использования токена Bearer и проверить его.Сначала я просто подумал, что поменяю схему аутентификации с cookie на auth, и этого должно быть достаточно, но я быстро понял, что httpContext.SignInAsync() нельзя использовать со схемой аутентификации на носителе Jwt, и теперь я немного растерялся.В то же время это выглядит довольно просто (всего 2 простых конечных точки, чтобы получить токен и проверить его), но в то же время это выглядит запутанным, как в том, как использовать существующую инфраструктуру asp.net для обработки всего остального.

Редактировать : потенциально я мог бы просто добавить глобальное промежуточное программное обеспечение в API, чтобы проверять токен доступа и проверять его вручную для каждого запроса, но на самом деле это не похоже на хорошее решение, поскольку А) делает 1 дополнительный запросдля каждого обычного запроса к API просто для проверки токена.B) Нет ClaimsPrincipal для доступа к пользовательским данным, таким как электронная почта и т. Д. Теперь все будет хорошо, поскольку я не хочу доступа к этим данным, но все же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...