OpenID Connect в Angular SPA с Asp. Net Core 3.1 Backend - PullRequest
2 голосов
/ 22 января 2020

Я хочу создать (Angular) SPA с (Asp. Net Core) бэкэндом, и я хочу использовать рекомендации по безопасности. Мой план таков:

  1. В SPA отображается кнопка входа
  2. Нажатие кнопки входа запускает код авторизации openid -подключить поток с каким-либо провайдером идентификации (Google, Microsoft и др. c.)
  3. Пользователь аутентифицируется с провайдером идентификации и затем перенаправляется обратно в SPA с кодом авторизации
  4. Затем SPA делает запрос входа в систему на сервер и передает код авторизации
  5. Сервер делает запрос поставщику идентификации, обменивая код на id_token и создает какой-то сеансовый билет для пользователя

Теперь я застрял из-за недостатка понимания

Проблема 1 - Лучшая практика

Является ли вышеуказанная процедура даже лучшей практикой? Или я делаю это неправильно?

Проблема 2 - Билет аутентификации

Мой бэкэнд - только API, он не отображает HTML страниц для пользователя , только обеспечивает Json ответов. Какой тип билета аутентификации я должен создать? Это должен быть JWT или повар ie? Я предполагаю, что это не может быть повар ie, так как API не может вернуть повар ie, который браузер будет правильно хранить. Так что это должен быть какой-то токен, предпочтительно JWT. Как должен SPA хранить его, локальное / сессионное хранилище?

Проблема 3 - Истечение срока действия и обновление sh

Предполагая, что серверная часть возвращает JWT в SPA Что должен содержать этот JWT? Какой должен быть срок его годности? Как мне обработать автоматическое c обновление?

Проблема 4 - Необходимые пакеты и библиотеки

Кроме того, укажите c для программирования (так как это вопрос программирования в конце концов), какие библиотеки необходимы для всего этого. Вопрос как для SPA, так и для серверной части. Я предполагаю, что мне нужен какой-то клиент openid-connect для SPA, и мне нужна некоторая библиотека на бэкэнде, которая может завершить поток кода авторизации (обменивая код для id_token ) это сделано IdentityServer4? Или есть какая-то другая библиотека.

1 Ответ

0 голосов
/ 22 января 2020

OpenID Connect является стандартом (поверх OAuth 2.0) и имеет много потоков (вы упомянули один Authorization Code flow, который не самый лучший для SPA.

Там было рекомендовано Implicit flow для приложений SPA, где SPA получает токены напрямую от IdP. Неявный поток в настоящее время устарел, и Authorization Code with PKCE Flow является лучшим вариантом для SPA на данный момент. Этот случайный пост в блоге даст вам более подробную информацию об этих потоках.

SPA может также получать refre sh токен, который может использоваться для получения нового токена доступа, но это зависит от используемого IdP.

Бэкэнду просто необходима библиотека для проверки токена (из запроса Authorization заголовок), в конечном итоге ему необходимо проверить некоторые утверждения (например, роль) для необязательных полномочий. Ему не нужно обрабатывать какой-либо поток OID C, поскольку он обычно общается через код ответа (200, 401, 403, 500, ...) назад к SPA и SPA обрабатывает ошибки.

ИМХО просто выберите подходящую библиотеку (предпочитайте OID C сертифицированный ) для вашего SPA ( мой любимый для Angular ) и это обеспечит многие полезные функции SPA из коробки (правильный поток, refken refre sh, хранилище токенов, http Interceptor для внутренних вызовов, ...). Я бы избегал любых библиотек, предоставляемых IdP - это может быть быстрой победой для реализации, но это может быть блокировка поставщика IdP, если они предоставляют некоторую функциональность вне стандарта OID C.

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