Не выполнена проверка подлинности Angular с помощью angular-auth-oidc-client @11

#angular

#angular

Вопрос:

Я пытаюсь обновить стратегию аутентификации для моего приложения Angular, используя пакет angular-auth-oidc-client. Я использовал более старую версию, но хотел обновить пакет до последней версии. Я прошел все этапы миграции, и все компилируется просто отлично, но я вижу проблему после того, как приложение переходит на сервер аутентификации и возвращается обратно.

В качестве фона наше приложение Angular работает на версии 9, и мы выполняем аутентификацию на экземпляре 4-го сервера идентификации, размещенного на собственном сервере. Мы использовали неявный поток, но пытаемся перейти к потоку кода с помощью PKCE.

Когда приложение загружается, мы загружаем необходимую конфигурацию для сервера аутентификации из файла (чтобы она могла отличаться в каждой среде), а затем появляется кнопка «войти», которую пользователь нажимает, чтобы перейти на сервер аутентификации. Мы переходим на сервер аутентификации, а затем обратно в приложение Angular. Компонент, к которому мы возвращаемся, — это /auth / callback, где checkAuth метод вызывается OidcSecurityService из angular-auth-oidc-client . Однако именно здесь возникает проблема. Приложение не может завершить аутентификацию. Возникают некоторые ошибки, и проверка подлинности не завершается. Я установил LogLevel значение Debug и получил этот вывод в консоли:

Ошибка при попытке аутентификации

Здесь действительно нет ничего, что помогло бы мне понять, что происходит или почему сбой аутентификации, кроме, возможно, того, что /connect/token конечная точка вернула значение 400. Но если я предоставил всю конфигурацию, которая требуется библиотеке, я мало что могу с этим поделать, верно?

Если у кого-нибудь есть какие-либо советы или он может как-либо помочь, это было бы здорово. Я также просматриваю журналы на нашем сервере аутентификации, чтобы посмотреть, смогу ли я что-нибудь выяснить там.

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

1. Можете ли вы проверить ответ, который вы получаете от ошибки 400 на вкладке web devtools Network?

2. Ответ «invalid_client», но клиент определенно существует. В журналах указано, что проверка секретности не удалась. Но мы не отправляем секрет (и не отправляли раньше с неявным потоком), и я предполагаю, что это потому, что это одностраничное приложение, а не серверное приложение.

3. Это означает, что вам нужно проверить, какой client запрос вы отправляете на этот запрос.

4. Итак, мы использовали правильный клиент, но не хватало нескольких атрибутов. Вы можете увидеть атрибуты ниже в ответе.

Ответ №1:

Я не буду говорить, что это ответ для всех, но у нас это сработало. Нам нужно было добавить следующие атрибуты в определение клиента:

 RequirePkce = true,
RequireClientSecret = false,
AllowOfflineAccess = true
  

Добавление этих трех атрибутов в определение клиента заставило все работать так, как ожидалось.