Внедрение OAuth2 / OIDC для VueJS SPA и asp.net ядро 3.1

#vue.js #asp.net-core #oauth-2.0 #single-page-application #openid-connect

#vue.js #asp.net-ядро #oauth-2.0 #одностраничное приложение #OpenID-подключение

Вопрос:

  • Интерфейс Vue для SPA и asp.net core 3.1 как серверная часть для API
  • Использование Microsoft.AspNetCore.SpaServices.Extensions пакета nuget so, среди прочего, файлы SPA будут передаваться из папки (wwwroot / dist), когда пользователи получают доступ к .net core
  • Серверный контроллер API украшен [Authorize] атрибутом
  • Маршрутизатор SPA имеет средства аутентификации, поэтому защищенные маршруты доступны только для пользователей, прошедших проверку подлинности
  • SPA будет использовать Axios и передавать токен-носитель в серверный API

Я хочу реализовать OAuth2 / Oidc код авторизации с помощью pkce, используя identityserver4 размещенный в другой системе.

Запрос на целевую страницу должен перенаправлять пользователя на identityserver4 для запроса логина / пароля и перенаправлять обратно после выполнения всех шагов с токеном.

В идеале я хочу, чтобы .net core обрабатывал все шаги oauth / oidc и не хотел иметь с этим дело, используя oidc-client javascript-клиент в SPA. Есть какие-либо предложения о том, как я могу это сделать? Спасибо

Ответ №1:

Ну, здесь есть две стандартные модели, и вам нужно выбрать одну из них, в зависимости от факторов, которые вас больше всего волнуют:

ВАРИАНТ 1: СЦЕНАРИЙ SPA

  • SPA является клиентом OAuth и аутентифицируется с помощью технологии Javascript
  • API — это сервер ресурсов OAuth

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

ВАРИАНТ 2: СЦЕНАРИЙ ВЕБ-СЕРВЕРНОЙ ЧАСТИ

Люди чаще всего выбирают этот параметр, когда хотят исключить токены из кода Javascript браузера:

  • Веб-сервер в C # является клиентом OAuth
  • Веб-серверная часть должна безопасно взаимодействовать с браузером и должна использовать для этого аутентификационный файл cookie
  • Для вызова API браузеру необходимо либо отправить файл cookie на серверную часть веб-сервера, чтобы получить токен, либо выполнить двойной переход всех вызовов API через серверную часть веб-сервера

О КЛИЕНТЕ OIDC

Лично я предпочитаю вариант 1, который, на мой взгляд, ближе к общим целям SPA, таким как междоменный хостинг и использование сетей доставки контента. Клиент OIDC на самом деле может привести к довольно простой реализации безопасности SPA, как в моей реализации на стороне клиента.

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

1. Спасибо за ваши предложения. Я выбрал вариант 1.