Criação de conta OAuth falha devido à detecção de CSRF imediatamente após o login no Auth0 no mesmo navegador

Configuramos o plugin oauth2 seguindo as instruções em Configurar cadastro e login com Auth0 usando o plugin OAuth2 Basic.

O fluxo funciona da seguinte forma:

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:

  1. 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.
  2. Por que isso funciona na página de login, mas não quando o login é acionado do lado do Auth0?
  3. 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?

Olá @joellabes - você poderia verificar qual URL você inseriu na configuração do Auth0 "Application Login URI"?

Deveria ser {seu fórum}/auth/oauth2_basic. Se você tiver /callback no final, isso pode causar o problema que você descreveu.

2 curtidas

Obrigado @david - no momento não tenho nada na caixa URI de login do aplicativo, mas tenho algo em URLs de callback permitidos:

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?

1 curtida

Você poderia tentar isso, sim.

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.

1 curtida

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.

4 curtidas

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?

Se houver uma maneira de fazer com que ele

então isso seria um bônus, mas isso é ótimo! Obrigado :folded_hands:

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.

3 curtidas

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