Eles clicam em Obter ajuda no fórum da comunidade e são levados ao Auth0 para fazer login
Após o login, eles são redirecionados para discourse.getdbt.com, mas com o aviso CSRF exibido.
Se eles clicarem em Login e depois em Usar sua conta da comunidade dbt, a conta é criada com sucesso e eles veem a caixa de diálogo de criação de conta onde podem definir seu nome de usuário, etc.
Vídeo Loom mostrando isso em ação:
Habilitei oauth2 debug auth e nos logs posso ver (oauth2_basic) Falha na autenticação! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detectado
Minhas perguntas:
Isso é um problema do Discourse ou do Auth0? Assumo que seja do Discourse, já que um fluxo de login praticamente idêntico para o Slack funciona sem problemas.
Por que isso funciona na página de login, mas não quando o login é acionado do lado do Auth0?
A mensagem de erro CSRF padrão implica que isso acontece quando o navegador muda, ou quando o fluxo de login demora muito. Nenhum desses casos se aplica, o que mais poderia estar causando isso?
Devo colocar https://discourse.getdbt.com/auth/oauth2_basic no campo URI de login do aplicativo e deixar https://discourse.getdbt.com/auth/oauth2_basic/callback no campo URLs de callback permitidos?
Você pode compartilhar mais detalhes sobre como o link “Obter ajuda no Fórum da Comunidade” é implementado? Para onde o link vai? Atualmente, estou assumindo que o botão é tratado pelo Auth0 e que adicionar essa nova configuração de URL fará com que o botão se vincule corretamente a /auth/oauth2_basic para iniciar o fluxo de login.
Desculpe pela resposta lenta - estou voltando depois das férias de Natal!
Eu fiz isso:
mas ainda obtenho o mesmo resultado.
Esse link aponta para https://dev-zb38hsho.us.auth0.com/samlp/5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr, onde dev-zb38hsho é o nosso ID de instância Auth0 e 5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr é o Client ID para a Aplicação Discourse no Auth0.
Visitar esse link redireciona para https://dev-zb38hsho.us.auth0.com/u/login?state=SESSION_SPECIFIC_TOKEN.
A chave é que o Discourse precisa iniciar o fluxo de autenticação em /auth/oauth2_basic, depois redirecionar para o Auth0, e então retornar para /auth/oauth2_basic/callback.
Eu esperava que pudéssemos fazer o Auth0 disparar o login começando com o primeiro URL, mas parece que ele está pulando o Discourse diretamente para o URL de callback.
Você poderia atualizar o botão para apontar para /auth/oauth2_basic no fórum? Isso iniciará o fluxo de autenticação e redirecionará imediatamente para o Auth0, então a experiência do usuário geral deve ser a mesma.
Sim, isso funciona! Ele pausa em uma página intermediária com um botão Continuar; a interação do usuário é obrigatória para acionar com segurança um fluxo OAuth ou algo assim?
Essa página é exibida quando há vários métodos de login em um site. Se você desabilitar os ‘logins locais’ (nome de usuário/senha), ele deverá prosseguir diretamente para o processo de login.