Problema de SSO: Parâmetros SSO ou SIG ausentes

Parece provável que algo não esteja configurado corretamente. Talvez tente dar um passo atrás. Eu não tenho um site provedor SSO configurado na minha configuração local no momento, mas isso pode te ajudar em parte.

No Discourse, certifique-se de que as seguintes configurações estejam configuradas:

A configuração discourse connect url deve ser definida para a URL que está lidando com o código que você postou.

Defina a configuração discourse connect secret para uma string de texto com pelo menos 10 caracteres. Note que você tem a string de 7 caracteres keyhere codificada diretamente no código que você postou. Presumo que você esteja mudando esse valor quando estiver executando o código. Defina-o para o mesmo valor que você inseriu no Discourse.

Agora saia do seu site Discourse. Abra a aba de rede do inspetor web do seu navegador. Clique no botão “Login” no Discourse. Você deverá ver requisições semelhantes às duas primeiras requisições da captura de tela abaixo:

A primeira requisição será para http://forum.example.com/session/sso?return_path=%2F

A próxima requisição deve ser para https://example.com/?sso=<payload_sso_enviado_do_discourse>&sig=<assinatura_sso>

example.com e forum.example.com devem ser definidos para os domínios reais que você está usando.

Se tudo estiver configurado corretamente, eu esperaria que isso atribuísse os valores dos parâmetros sso e sig às variáveis que você definiu aqui:

$sso = $_GET['sso'];
$sig = $_GET['sig'];

Se fosse eu, provavelmente comentaria o resto do código e apenas confirmaria que você pode receber o payload e atribuí-lo às variáveis.

Com o DiscourseConnect ativado, você pode fazer login novamente no seu site Discourse visitando a rota /u/admin-login. Se você tiver acesso ao console Rails do site Discourse, também poderá fazer login desativando o DiscourseConnect do console Rails:

SiteSetting.enable_discourse_connect = false

É possível que haja erros mais adiante no código que você postou. Por exemplo, eu acho que você precisa chamar urldecode no valor do parâmetro sso antes de gerar a sig esperada. Dê uma olhada em como o plugin WP Discourse lida com isso:

$payload na função acima é apenas o valor do parâmetro de consulta sso, após ter sido sanitizado aqui: wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub.

1 curtida