Consegui fazer funcionar. @RGJ apontou o seguinte de forma útil:
Quando o Discourse faz o redirecionamento e envia a chave de API para ser decodificada como um payload na URL de redirecionamento, essa chave passa por codificação de URL. Portanto, para obter a chave de API real, você precisa fazer a decodificação de URL no payload. O resultado é a chave de API que funciona corretamente (que corresponde ao comprimento da chave que o Discourse exibe na tela).
Forneci os passos que sigo para fazer isso funcionar aqui: