# Плагин Openid-connect не может получить конфигурацию

**URL:** https://meta.discourse.org/t/openid-connect-plugin-cant-fetch-configuration/253728
**Category:** SSO
**Created:** [01.Февраль.2023 18:16:11 UTC](https://meta.discourse.org/t/openid-connect-plugin-cant-fetch-configuration/253728 "2023-02-01T18:16:11Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![joshml.extra](https://avatars.discourse-cdn.com/v4/letter/j/858c86/32.png) [@joshml.extra](https://meta.discourse.org/u/joshml.extra)
#### Post date: [01.Февраль.2023 18:16:11 UTC](https://meta.discourse.org/t/openid-connect-plugin-cant-fetch-configuration/253728/1 "2023-02-01T18:16:11Z")

</div>

Я уже довольно давно пытаюсь разобраться в этом вопросе, но не могу решить проблему. Я пытаюсь интегрировать Discourse с настройками Keycloak для аутентификации, используя плагин discourse-openid-connect. Я использую версию discourse-docker 3.0.1. Сейчас при нажатии кнопки входа через OpenID Connect в Discourse появляется сообщение: «Не удалось получить конфигурацию от провайдера идентификации. Пожалуйста, попробуйте снова».

Я мигрирую на новую настройку Discourse, и самое забавное, что Discourse успешно получает доступ к экрану входа в Keycloak с помощью моего СТАРОГО экземпляра Keycloak, но не может сделать этого с новым. Это означает, что следующее должно быть верным:

- настройки плагина openid-connect точно правильные (скопированы из старого Discourse)
- настройки Keycloak для клиента Discourse точно правильные (скопированы из старого Discourse)
- проблем с сетью нет
- фаервол отключен или ничего не блокирует трафик

Кроме того, я обнаружил, что могу успешно выполнить curl запрос к URL документа обнаружения для Keycloak с экземпляра Discourse. Версия Keycloak такая же, как в старом экземпляре, и аутентификация Keycloak работает корректно для других инструментов, расположенных в том же регионе AWS и зоне доступности, что и Discourse. Ниже приведена ошибка из логов при попытке входа через openid-connect.

Я провел исследования и протестировал множество вариантов, но ничего не сработало. Ошибка о запрещенных IP-адресах кажется довольно общей, и я почти уверен, что фаервол ничего не блокирует, особенно учитывая, что я могу успешно выполнить curl запрос к документу обнаружения. Я могу предположить только, что возможно Discourse пытается получить документ из какого-то кэша или не обращается к правильному URL токена, но я просто не знаю. Любая помощь будет оценена.

```plaintext
Started GET "/session/csrf" for <my_ip> at 2023-02-01 18:02:24 +0000
Processing by SessionController#csrf as JSON
Completed 200 OK in 2ms (Views: 0.2ms | ActiveRecord: 0.0ms | Allocations: 406)
Started POST "/auth/oidc" for 10.158.133.85 at 2023-02-01 18:02:24 +0000
(oidc) Setup endpoint detected, running now.
OIDC Log: Fetching discovery document from https://<keycloak_URL>.com/auth/realms/<my_realm>/.well-known/openid-configuration
OIDC Log: Fetching discovery document raised error Faraday::ConnectionFailed FinalDestination: all resolved IPs were disallowed
OIDC Log: Discovery document is

---

(oidc) Request phase initiated.
(oidc) Authentication failure! openid_connect_discovery_error: OmniAuth::OpenIDConnect::DiscoveryError, Discovery document is missing
Started GET "/auth/failure?message=openid_connect_discovery_error&strategy=oidc" for <my_ip> at 2023-02-01 18:02:24 +0000
Processing by Users::OmniauthCallbacksController#failure as HTML
  Parameters: {"message"=>"openid_connect_discovery_error", "strategy"=>"oidc"}
  Rendered users/omniauth_callbacks/failure.html.erb within layouts/no_ember (Duration: 0.1ms | Allocations: 17)
  Rendered layout layouts/no_ember.html.erb (Duration: 17.3ms | Allocations: 5113)
Completed 200 OK in 24ms (Views: 19.7ms | ActiveRecord: 0.0ms | Allocations: 6610)

```

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [01.Февраль.2023 18:28:46 UTC](https://meta.discourse.org/t/openid-connect-plugin-cant-fetch-configuration/253728/2 "2023-02-01T18:28:46Z")

</div>

Существует [патч безопасности](https://github.com/discourse/discourse/blame/64171730827c58df26a7ad75f0e58f17c2add118/lib/final_destination/ssrf_detector.rb), который запрещает обращение к адресам в частных диапазонах (10.0.0.0/8 и т. д.), чтобы предотвратить исследование внутренней сети.

Чтобы обойти эту проверку, вам нужно добавить имя хоста в раздел «Администрирование» → «Настройки» → «Безопасность» → «Разрешённые внутренние хосты».

Было бы неплохо, если бы плагин делал это за вас.

---

<div class="post-metadata">

### Author: ![joshml.extra](https://avatars.discourse-cdn.com/v4/letter/j/858c86/32.png) [@joshml.extra](https://meta.discourse.org/u/joshml.extra)
#### Post date: [01.Февраль.2023 18:37:59 UTC](https://meta.discourse.org/t/openid-connect-plugin-cant-fetch-configuration/253728/4 "2023-02-01T18:37:59Z")

</div>

Отлично! Значит, если я добавлю сюда свой Keycloak, всё должно заработать? Буду ли я использовать для этого URL или IP-адрес?

РЕДАКТИРОВАНИЕ: Забыл, это сработало. Большое спасибо! Я потратил так много времени на это, а решение оказалось таким простым.

---

<div class="post-metadata">

### Author: ![hiteshsp](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hiteshsp/32/291877_2.png) [@hiteshsp](https://meta.discourse.org/u/hiteshsp)
#### Post date: [02.Февраль.2023 18:58:52 UTC](https://meta.discourse.org/t/openid-connect-plugin-cant-fetch-configuration/253728/5 "2023-02-02T18:58:52Z")

</div>

@joshml.extra, какое совпадение — я столкнулся с точно такой же проблемой при интеграции Keycloak через OIDC, и решение, предложенное @RGJ, выглядит многообещающе. Я попробовал его, но оно сработало только для IP-адреса, в моём случае — для IP-адреса пода в Kubernetes.

@RGJ — возможно ли, чтобы DNS работал аналогичным образом? В моём случае это URL Nginx Ingress, и я вижу ошибку проверки сертификата, так как на контроллере Nginx используются сертификаты, подписанные внутренним УЦ. URL Ingress разрешается в частный IP-адрес.

Спасибо за эту тему!! Очень признателен 🙂. Я уже почти отказался от поиска решения для нашей изолированной (air-gapped) среды.

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [02.Февраль.2023 19:21:51 UTC](https://meta.discourse.org/t/openid-connect-plugin-cant-fetch-configuration/253728/6 "2023-02-02T19:21:51Z")

</div>

> [@Hitesh](#):
>
> Ошибка проверки сертификата, так как на контроллере Nginx используются сертификаты, подписанные внутренним центром сертификации (CA). URL-адрес ingress разрешается в приватный IP-адрес.

Похоже, что ваша проблема не связана с приватным IP-адресом. В конце концов, если бы доступ блокировался из-за приватного IP, вы бы даже не дошли до этапа ошибки проверки сертификата.

---

<div class="post-metadata">

### Author: ![hiteshsp](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hiteshsp/32/291877_2.png) [@hiteshsp](https://meta.discourse.org/u/hiteshsp)
#### Post date: [03.Февраль.2023 03:24:30 UTC](https://meta.discourse.org/t/openid-connect-plugin-cant-fetch-configuration/253728/7 "2023-02-03T03:24:30Z")

</div>

Понял! Имеет смысл.

Спасибо за объяснение. У меня всё работает отлично с IP-адресом / именем хоста.

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [05.Март.2023 03:25:13 UTC](https://meta.discourse.org/t/openid-connect-plugin-cant-fetch-configuration/253728/8 "2023-03-05T03:25:13Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
