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?
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?
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.
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.
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”.