Istio authservice oid c не может обменять код авторизации для токена доступа - PullRequest
2 голосов
/ 20 марта 2020

Мы пытаемся настроить провайдера oid c для authZ и authN с istio в нашем кластере k8s. Мы следовали этому примеру здесь: Bookinfo с примером Authservice для интеграции. Ниже приведены подробные сведения о настройке:

OID C поставщик: Keycloak
Тип предоставления: authorization_code
Версия Istio: 1.5

Поток аутентификации:

  1. По первому запросу, поскольку аутентификация отсутствует, authservice успешно перенаправляет на Keycloak, где мы можем успешно войти в систему.
  2. Keycloak затем перенаправляет запрос к приложению на redirect_uri. Код авторизации теперь присутствует в этом URI.
  3. redirect_uri снова перехватывается authservice, и он обнаруживает, что URL-адрес является URL-адресом фильтра для oid c, как определено в configmap
  4. Теперь он пытается вызвать keycloak для обмена кода авторизации для токена доступа.

Это этап, на котором authservice завершается ошибкой и выдает ошибку IdP connection error. Журнал для запроса выглядит следующим образом:

Check: processing request ://microservice.url.com/appservice/oauth/callback?state=LeCNEqfwA6EUFGNGLt7JALx8jCWkPxjn7qCELbqkKrk&session_state=18f0e3b0-bee2-44a5-b049-6e349dbeda49&code=ddea1ea6-5616-416d-8291-c00bce6f2e9b.18f0e3b0-bee2-44a5-b049-6e349dbeda49.af7e7c31-fd4b-4a66-9856-25d1ac305d3f with filter chain idp_filter_chain
20/03/2020 17:27:48 [2020-03-20 11:57:48.546] [console] [trace] New
20/03/2020 17:27:48 [2020-03-20 11:57:48.547] [console] [trace] OidcFilter
20/03/2020 17:27:48 [2020-03-20 11:57:48.548] [console] [trace] Process
20/03/2020 17:27:48 [2020-03-20 11:57:48.548] [console] [debug] Call from @10.42.5.53 to @10.42.5.58
20/03/2020 17:27:48 [2020-03-20 11:57:48.549] [console] [trace] MatchesCallbackRequest: checking handler for ://microservice.url.com/appservice/oauth/callback?state=LeCNEqfwA6EUFGNGLt7JALx8jCWkPxjn7qCELbqkKrk&session_state=18f0e3b0-bee2-44a5-b049-6e349dbeda49&code=ddea1ea6-5616-416d-8291-c00bce6f2e9b.18f0e3b0-bee2-44a5-b049-6e349dbeda49.af7e7c31-fd4b-4a66-9856-25d1ac305d3f
20/03/2020 17:27:48 [2020-03-20 11:57:48.549] [console] [trace] RetrieveToken
20/03/2020 17:27:48 [2020-03-20 11:57:48.550] [console] [trace] Post
20/03/2020 17:27:48 [2020-03-20 11:57:48.618] [console] [info] Post: HTTP error encountered: stream truncated
20/03/2020 17:27:48 [2020-03-20 11:57:48.618] [console] [info] RetrieveToken: HTTP error encountered: IdP connection error
20/03/2020 17:27:48 [2020-03-20 11:57:48.618] [console] [trace] Request processing complete
20/03/2020 17:27:48 [2020-03-20 11:57:48.619] [console] [trace] Processing completion and deleting state

При дальнейшей проверке кода я обнаружил, что эта ошибка вызывается здесь: oid Authservice c filter - Github

Чтобы исключить проблемы с конфигурацией, я использовал OpenID Debugger , чтобы вручную сгенерировать код авторизации, а затем вызвал api, чтобы обменять его на токен api. Я был в состоянии успешно восстановить его, не было никаких проблем с этим. Но почему-то это не работает с authservice.

Может быть, что-то не так с моей стороны? Кто-нибудь сталкивался с этой проблемой раньше? Любая помощь приветствуется. Дайте мне знать, если понадобится больше деталей.

1 Ответ

1 голос
/ 21 марта 2020

Эта проблема была исправлена ​​командой authservice. Проблема здесь заключалась в том, что, как сказал Райан из authservice:

В журнале указывается, что запрос был успешным вплоть до конца, когда служба Authservice пыталась корректно завершить соединение TLS и сервер на другая сторона не участвовала полностью в постепенном отключении.

Исправление здесь состояло в том, чтобы игнорировать ошибки усечения. Исправление теперь объединено с мастером и будет доступно в следующем выпуске. Вы можете создать изображение docker самостоятельно для быстрого исправления. Более подробную информацию о проблеме и инструкции по компиляции можно найти здесь на этом выпуске github

...