Usuários OIDC não associando com usuários Discourse existentes

Olá! Estou tentando configurar o Discourse com o plugin Discourse OpenID Connect e o Keycloak.

Consegui fazer funcionar e pude não apenas fazer login na minha instância do Discourse usando minhas credenciais do Keycloak, mas também associar uma conta Discourse já existente com a do OIDC. Infelizmente, cometi um erro ao configurar o contêiner do Keycloak e acabei perdendo sua configuração e banco de dados.

Desde então, reinstalei o Keycloak (corretamente desta vez!) e reconfigurei o Discourse para usar o novo Client ID, mas embora a integração pareça estar funcionando (habilitar os logs em /logs mostra que a autenticação realmente funcionou), não consigo mais associar contas do Discourse com contas OIDC.

Quando tento fazer login no Discourse, uso o OIDC, sou recebido pela nova interface de conta e, em seguida, clico no link para associar a uma conta já existente; faço login, sou redirecionado para o Discourse e, se fizer logout e login novamente, vejo a mesma nova interface de conta.

Usei o Data Explorer plugin para verificar as associações, e meu usuário aparece como NULL; o ID do provedor corresponde ao User ID no Keycloak, no entanto.

Tenho a opção “OpenID Connect allow association change” ativada.

Imagino que o Discourse ainda esteja retendo o que quer que estivesse lá da minha instalação anterior do Keycloak, e apenas mudar o novo Client ID não está resolvendo.

Há algo mais que eu deva verificar e que possa ter deixado passar?

Abraços

Você está usando o mesmo endereço de e-mail entre as contas? Você consegue reproduzir este problema com uma conta nova que não estava associada ao Keycloak antes?

Obrigado pela resposta rápida!

Eu não estava usando o mesmo endereço de e-mail entre as contas, mas o alterei no Keycloak para corresponder ao usado no Discourse, e ainda é o mesmo. A resposta no Data Explorer é a mesma (“NULL” user).

Tentei criar um novo usuário, e estou recebendo um erro de “Nome de usuário, e-mail ou senha inválidos”, embora o nome de usuário esteja perfeitamente bom e disponível, o e-mail seja válido e a senha tenha sido gerada pelo meu gerenciador de senhas. Isso provavelmente não está relacionado, mas é outra coisa que preciso descobrir por que está acontecendo.

Olá,

Tenho o mesmo problema aqui. Estou usando uma Nextcloud como provedor OIDC, mas isso provavelmente não é relevante para o problema.

Consigo fazer login com a conta da Nextcloud. Em seguida, conforme descrito acima, sou apresentado à opção de registrar uma nova conta ou fazer login com uma existente. No entanto, não é estabelecida nenhuma associação com a conta existente por meio do endereço de e-mail.

Se seleciono “Registrar”, sou imediatamente redirecionado novamente para a página inicial no estado desconectado e preciso fazer login novamente. Nenhuma mensagem de erro é exibida.

É realmente estranho.

Tudo funciona corretamente quando me logo com uma conta OIDC para a qual não existe uma conta Discourse correspondente. Nesse caso, uma nova conta é criada imediatamente e a conta associada também é exibida nas configurações do usuário.

Talvez alguém ainda tenha uma ideia do que estou fazendo de errado ou, no final, se descubra que há um bug aqui.

Atenciosamente,

Mike

Olá a todos,

Consegui descobrir por que a associação não estava funcionando. Caso alguém precise resolver esse problema também, aqui está minha solução.

O endereço de e-mail enviado não é marcado como “verificado” por padrão. Para atingir isso, no painel de administração, em Provedores OpenID Connect → Configurações, defini o valor de “Especificar verificação de endereço de e-mail no token” para “Definir como sempre verificado”.