Использование IdentityServer4/5 без дополнительных библиотек Angular

Фон

Я проверяю варианты переноса моей системы аутентификации службы на identityserver4\5. У меня есть два сайта:

      account.company.com
company.com

Мои веб-сайты — это SPA, основанные на ядре .NET и Angular.

Вопрос

Я видел несколько демо-проектов демо-проектов identityserver4, основанных на SPA, которые используют дополнительные библиотеки angular (такие как angular-auth-oidc-client и oidc-client-js). На самом деле эти библиотеки с идентификатором и секретом раскрывают эту информацию общественности.

  1. Безопасно ли иметь идентификатор клиента и секрет клиента в браузере?
  2. Я должен реализовать identityserver4\5 с клиентом Angular? возможно, серверной части будет достаточно (все клиентские запросы будут передаваться на серверную сторону, что является client)?

1 ответ

Если вы запускаете SPA, вам лучше всего подойдет oidc-client.

Но учебники, которые вы прочитали, не имеют смысла, которые предполагают авторизацию client_id/secret. Нет, нельзя хранить секрет клиента в приложении SPA.

По этой причине у вас есть код авторизации + поток PKCE. AuthCode + PKCE (Proof of Key Code Exchange) работает как поток кода аутентификации (client_id + секрет + код для получения токена), но секрет генерируется для каждого запроса (см. здесь). Это решает проблему наличия статического секрета и предотвращает повторные атаки.

В прошлом Hybrid Flow возвращал токен в запросе перенаправления с Identity Server (после входа в систему и при перенаправлении обратно на ваш веб-сайт), но этот подход больше рекомендуется, поскольку код аутентификации + PKCE является более безопасным подходом.

Вы не можете использовать поток кода, основанный на бэкэнде в SPA, потому что бэкенд не знает учетных данных, и просить пользователя ввести учетные данные напрямую вместо перенаправления их на сервер идентификации менее безопасно (и менее заслуживают доверия, поскольку ваше приложение должно фактически видеть учетные данные), чем интерактивные потоки (которые перенаправляют вас на страницу входа в систему Identity Server)