Я нашел проблему: заголовок не был установлен как “Content-Type: application/json”. И я вижу, что у @qlands выше была та же самая ситуация.
Единственная оставшаяся для меня проблема такая же, как у @nodomain: аккаунт создаётся успешно, но аватар не добавляется. Пример ответа:
Body: {
"access_token":"...",
"token_type":"bearer",
"expires_in":"3600",
"scope":"profile",
"profile" : {
"id":1234,
"email": "...",
"name": "...",
"picture": "https://somedomain.com/somevalidpicture.jpg"
}
}
И он корректно разбирается, так как появляется в следующем логе:
Отладка OAuth2: ответ after_authenticate:
creds: {"token"=>"...", "expires_at"=>1702053692, "expires"=>true}
uid: 1234
info: {"email"=>"...", "name"=>"...", "avatar"=>"https://somedomain.com/somevalidpicture.jpg"}
extra: {}
Я проверил, что адрес картинки верный, а её размер составляет 300x300.
Есть ли какие-то идеи по этому поводу?
Редактирование: кто-то только что создал аккаунт, и он подтянул картинку из Gravatar. Возможно, валидная картинка из JSON перезаписывается пустым результатом от Gravatar?
Authentik как провайдер OAuth
Сейчас я изучаю Authentik и хотел бы спросить, есть ли у кого-то опыт работы с ним и Discourse?
К сожалению, я не нашел официальной документации по интеграции с Discourse.
Там очень много настроек, в которых можно запутаться ![]()
У Portainer реализация OAuth гораздо проще.
Portainer, просто для сравнения:
Как дела? Хочу реализовать SSO с Authentik для Discourse и Ghost, но мой проект пока на паузе.
Буду очень признателен за любые советы ![]()
Сталкивался ли кто-нибудь с проблемой, когда SSO находится во внутренней сети, и когда Discourse пытается получить доступ к сайту SSO, используя внутренний IP-адрес, он становится недоступным?
tail -f production.log
(oauth2_basic) Обнаружена конечная точка настройки, запуск в процессе.
(oauth2_basic) Инициализирована фаза запроса.
Запущен POST "/presence/update" для 10.10.10.10 в 2024-06-15 18:19:44 +0000
Обработка PresenceController#update как */*
Параметры: {"client_id"=>"xxx", "present_channels"=>["/chat-user/core/1"]}
Завершено 200 OK за 26 мс (Views: 0.2 мс | ActiveRecord: 0.0 мс | Allocations: 1895)
Запущен GET "/auth/oauth2_basic/callback?code=xxxx&state=xxxx" для 10.10.10.10 в 2024-06-15 18:19:49 +0000
(oauth2_basic) Обнаружена конечная точка настройки, запуск в процессе.
(oauth2_basic) Инициализирована фаза обратного вызова.
OAuth2::ConnectionError (FinalDestination: все разрешённые IP-адреса были запрещены)
lib/final_destination/ssrf_detector.rb:105:in `lookup_and_filter_ips'
lib/final_destination/http.rb:15:in `connect'
lib/middleware/omniauth_bypass_middleware.rb:43:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:391:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:289:in `call'
Ошибка веб-страницы
Упс
Программное обеспечение, управляющее этим форумом обсуждений, столкнулось с неожиданной проблемой. Приносим извинения за неудобства.
Подробная информация об ошибке была зафиксирована в логах, и сгенерировано автоматическое уведомление. Мы разберёмся в этом.
Дальнейших действий не требуется. Однако, если ошибка сохраняется, вы можете предоставить дополнительные детали, включая шаги для воспроизведения ошибки, опубликовав тему обсуждения в категории обратной связи сайта.
Я проверил логи файрвола, но не нашёл никаких записей о блокировке! Более того, и Discourse, и SSO находятся во внутренней сети, поэтому проблем с блокировкой файрволом или перехватом запросов быть не должно!
Но когда я указал IP-адрес сайта SSO как внешний публичный адрес, всё снова работает нормально!
Это баг в плагине или проблема с моей конфигурацией?
Вы можете добавить имя хоста вашего внутреннего сайта SSO в настройку сайта ‘allowed_internal_hosts’. После этого Discourse сможет подключиться к нему.
Как изменить client_id на appid в URL?
Мой сервер не поддерживает client_id в URL, только appid.
Мне нужно модифицировать плагин.
Пожалуйста, помогите.
Прошел год, и вы все еще помогаете с этим постом! Спасибо!! Authentik теперь работает у меня.
Здравствуйте, я использую OAuth2 с Zalo, но столкнулся с проблемой, показанной на прикрепленном изображении. Кто-нибудь знает причину?
Я настроил URL обратного вызова: https://sphere.daviteq.com/auth/basic_oauth2/callback
Может, кто-нибудь поделится конфигурацией authentik? Я почти уверен, что всё настроено правильно, но всё равно получаю ошибку: (oauth2_basic) Authentication failure! Timeout::Error: Faraday::TimeoutError, Timeout::Error
Этот плагин теперь включён в ядро Discourse в рамках Bundling more popular plugins with Discourse core. Если вы используете самохостинг и пользуетесь этим плагином, вам нужно удалить его из файла app.yml перед следующим обновлением.
x-ref


