OAuth2 Básico do Discourse

Encontrei o problema: o cabeçalho não estava definido como “Content-Type: application/json”. E posso ver que foi o mesmo para @qlands acima.

O único problema restante para mim agora é o mesmo que o do @nodomain: a conta é criada com sucesso, mas o avatar não é incluído. Resposta de exemplo:

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

E é analisado corretamente, pois aparece no seguinte log:

OAuth2 Debugging: after_authenticate response:

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

Verifiquei que o endereço da imagem está correto e seu tamanho é 300x300.

Alguma ideia sobre isso?

Editar: alguém acabou de criar uma conta e pegou a imagem do Gravatar. Talvez a imagem válida no JSON seja substituída por um resultado em branco do Gravatar?

Authentik como provedor OAuth

Estou atualmente experimentando o Authentik e gostaria de perguntar se mais alguém tem alguma experiência com ele e o Discourse?

Infelizmente, não encontrei um documento de suporte oficial para o Discourse.

Há muitas configurações para mexer :smiley:

O Portainer tem uma implementação de OAuth muito mais simples.

O Portainer, apenas para comparação:

1 curtida

Como vai? Quero implementar SSO com Authentik no Discourse e Ghost, mas meu projeto está em espera no momento.

Qualquer conselho será muito apreciado :slight_smile:

1 curtida

Alguém já encontrou o problema em que o SSO está localizado em uma rede interna e, quando o Discourse tenta acessar o site SSO usando um endereço IP interno, ele se torna inacessível?

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'

Erro na página da web

Oops
O software que alimenta este fórum de discussão encontrou um problema inesperado. Pedimos desculpas pelo inconveniente.

Informações detalhadas sobre o erro foram registradas e uma notificação automática foi gerada. Vamos dar uma olhada.

Nenhuma ação adicional é necessária. No entanto, se a condição de erro persistir, você pode fornecer detalhes adicionais, incluindo etapas para reproduzir o erro, postando um tópico de discussão na categoria de feedback do site.

Verifiquei os logs do meu firewall, mas não encontrei nenhum registro de bloqueio! Além disso, tanto o Discourse quanto o SSO estão localizados na rede interna, então não deveria haver problemas de bloqueio de firewall ou interceptação de solicitação!

Mas quando aponto o endereço IP do site SSO para a rede pública externa, ele volta a funcionar normalmente!

Isso é um bug no plugin ou um problema de configuração do meu lado?

Você pode adicionar o nome do host do seu site SSO interno à configuração do site ‘allowed_internal_hosts’. Assim, o Discourse poderá se conectar a ele.

Como alterar o client_id para appid na URL?
Meu servidor não suporta client_id na URL, exceto appid.
Tenho que modificar o plugin.
Por favor, me ajude.

Um ano depois e você ainda está ajudando com este post! Obrigado!! Authentik agora funciona para mim.

3 curtidas

Olá, estou usando Oauth2 com Zalo, mas tivemos o problema como anexado. Alguém sabe o motivo?

Configurei a URL de retorno de chamada como: https://sphere.daviteq.com/auth/basic_oauth2/callback

Alguém pode compartilhar uma configuração do authentik? Tenho quase certeza de que configurei tudo corretamente, mas ainda estou recebendo (oauth2_basic) Authentication failure! Timeout::Error: Faraday::TimeoutError, Timeout::Error

1 curtida

:partying_face: Este plugin agora está incluído no core do Discourse como parte de Bundling more popular plugins with Discourse core. Se você auto-hospeda e usa o plugin, precisa removê-lo do seu app.yml antes da próxima atualização.

x-ref

1 curtida