Discourse OAuth2 Básico

Encontré el problema: la cabecera no estaba configurada como “Content-Type: application/json”. Y puedo ver que fue lo mismo para @qlands anteriormente.

El único problema que me queda ahora es el mismo que @nodomain: la cuenta se crea correctamente pero no se incluye el avatar. Respuesta de ejemplo:

Body: {
  "access_token":"...",
  "token_type":"bearer",
  "expires_in":"3600",
  "scope":"profile",
  "profile" : {
    "id":1234,
    "email": "...",
    "name": "...",
    "picture": "https://somedomain.com/somevalidpicture.jpg"
  }
}

Y se analiza correctamente, ya que aparece en el siguiente registro:

OAuth2 Debugging: after_authenticate response:

creds: {"token"=>"...", "expires_at"=>1702053692, "expires"=>true}
uid: 1234
info: {"email"=>"...", "name"=>"...", "avatar"=>"https://somedomain.com/somevalidpicture.jpg"}
extra: {}

Comprobé que la dirección de la imagen es correcta y su tamaño es de 300x300.

¿Alguna idea sobre esto?

Editar: alguien acaba de crear una cuenta y tomó la imagen de Gravatar. ¿Quizás la imagen válida en el json es anulada por un resultado en blanco de Gravatar?

Authentik como proveedor de OAuth

Estoy jugando actualmente con Authentik y me gustaría preguntar si alguien más tiene experiencia con él y Discourse.

Desafortunadamente, no he encontrado un documento de soporte oficial para Discourse.

Hay muchas configuraciones con las que jugar :smiley:

Portainer tiene una implementación de OAuth mucho más simple.

Portainer, solo para comparar:

1 me gusta

¿Cómo va? Quiero implementar SSO con Authentik en Discourse y Ghost, pero mi proyecto está en espera en este momento.

Cualquier consejo será muy apreciado :slight_smile:

1 me gusta

¿Alguien se ha encontrado con el problema de que el SSO se encuentra en una red interna y, cuando Discourse intenta acceder al sitio SSO utilizando una dirección IP interna, este se vuelve inaccesible?

tail -f production.log

(oauth2_basic) Setup endpoint detected, running now.
(oauth2_basic) Request phase initiated.
Started POST "/presence/update" for 10.10.10.10 at 2024-06-15 18:19:44 +0000
Processing by PresenceController#update as */*
  Parameters: {"client_id"=>"xxx", "present_channels"=>["/chat-user/core/1"]}
Completed 200 OK in 26ms (Views: 0.2ms | ActiveRecord: 0.0ms | Allocations: 1895)
Started GET "/auth/oauth2_basic/callback?code=xxxx&state=xxxx" for 10.10.10.10 at 2024-06-15 18:19:49 +0000
(oauth2_basic) Setup endpoint detected, running now.
(oauth2_basic) Callback phase initiated.
OAuth2::ConnectionError (FinalDestination: all resolved IPs were disallowed)
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/middleware/csp_script_nonce_injector.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'

Error de página web

Oops
El software que impulsa este foro de discusión encontró un problema inesperado. Lamentamos las molestias.

Se registró información detallada sobre el error y se generó una notificación automática. Lo revisaremos.

No se requiere ninguna acción adicional. Sin embargo, si la condición de error persiste, puede proporcionar detalles adicionales, incluidos los pasos para reproducir el error, publicando un tema de discusión en la categoría de comentarios del sitio.

Revisé los registros de mi firewall, ¡pero no encontré ningún registro de bloqueo! Además, tanto Discourse como SSO se encuentran en la red interna, ¡por lo que no debería haber problemas de bloqueo de firewall ni de interceptación de solicitudes!

¡Pero cuando apunto la dirección IP del sitio SSO a la red pública externa, vuelve a funcionar normalmente!

¿Es esto un error en el plugin o un problema de configuración de mi parte?

Puede agregar el nombre de host de su sitio SSO interno a la configuración del sitio ‘allowed_internal_hosts’. Entonces Discourse podrá conectarse a él.

¿Cómo cambiar el client_id por appid en la url?
Mi servidor no soporta client_id en la url, solo appid.
Tengo que modificar el plugin.
Por favor, ayúdame.

¡Un año después y sigues ayudando con esta publicación! ¡¡Gracias!! Authentik ahora funciona para mí.

3 Me gusta

Hola, estoy usando Oauth2 con Zalo, pero tenemos el problema adjunto. ¿Alguien sabe la razón?

He configurado la URL de devolución de llamada: https://sphere.daviteq.com/auth/basic_oauth2/callback

¿Alguien puede compartir una configuración de authentik? Estoy bastante seguro de que tengo todo configurado correctamente, pero sigo recibiendo (oauth2_basic) ¡Fallo de autenticación! Timeout::Error: Faraday::TimeoutError, Timeout::Error

1 me gusta

:partying_face: Este plugin ahora está incluido en el núcleo de Discourse como parte de Bundling more popular plugins with Discourse core. Si te autoalojas y usas el plugin, necesitas eliminarlo de tu app.yml antes de tu próxima actualización.

x-ref

1 me gusta