Pular para o conteúdo principal

Como resolver o erro POST_REGISTRATION_ERROR ao integrar o POK com o Moodle

O POST_REGISTRATION_ERROR aparece durante o registro dinâmico do POK LTI com o Moodle (3.10 ou superior) porque o servidor web que hospeda o Moodle não passa o header Authorization para o PHP, e o token de registro que o POK envia nunca chega ao Moodle. Resolva adicionando uma diretiva à configuração do Apache ou do Nginx e tente o Add LTI Advantage novamente.

Como o erro aparece

Ao colar a Tool URL dinâmica do POK no Moodle e clicar em Add LTI Advantage (em Site administration > Plugins > External tool > Manage tools, na página /mod/lti/toolconfigure.php), a tela de Manage tools mostra:

Integration process failed

Integration could not be completed at this time. Code (POST_REGISTRATION_ERROR)

O que está acontecendo de verdade

Durante o registro dinâmico, o POK envia ao Moodle um token de registro dentro do header HTTP Authorization. O POK sempre envia esse token (confirmado nos logs do POK), mas o erro interno que o Moodle retorna é missing_registration_token.

A causa mais comum: muitos servidores Moodle baseados em Apache não passam o header Authorization para o PHP por padrão. O POK envia o token corretamente, mas o Moodle nunca o vê chegar, e por isso informa que ele está faltando.

Em resumo: não é um problema do token nem do POK, e sim da configuração do servidor web que hospeda o Moodle, que descarta o header Authorization antes que o Moodle possa lê-lo.

Solução no Apache

Adicione a seguinte diretiva à configuração do Apache para que ele repasse o header Authorization ao PHP:

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

Onde colocá-la, conforme a sua configuração:

  • No VirtualHost do site Moodle, ou
  • No arquivo .htaccess na raiz da instalação do Moodle, ou
  • No arquivo de configuração global do Apache (por exemplo apache2.conf / httpd.conf).

Depois de adicionar a diretiva:

  1. Salve o arquivo de configuração.

  2. Recarregue ou reinicie o Apache para aplicar a mudança:

    sudo systemctl reload apache2

    O comando pode variar conforme o sistema: apache2 ou httpd.

Se a diretiva SetEnvIf não funcionar no seu ambiente, tente esta alternativa no .htaccess:

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [E=HTTP_AUTHORIZATION:%1]

Solução no Nginx

Se o seu Moodle roda em Nginx com PHP-FPM, adicione isto dentro do bloco location que processa o PHP:

fastcgi_param HTTP_AUTHORIZATION $http_authorization;

Depois recarregue o Nginx com sudo systemctl reload nginx.

Hospedagem gerenciada

Se você não administra o servidor diretamente (por exemplo, se o Moodle está em uma hospedagem gerenciada), compartilhe esta instrução com o seu provedor de hospedagem ou equipe de infraestrutura para que apliquem a mudança.

Como verificar se o header chega ao servidor

Antes ou depois de aplicar a mudança, você pode confirmar se o header Authorization está chegando:

  1. Faça uma requisição HTTP para o seu Moodle incluindo um header Authorization, por exemplo com curl:

    curl -H "Authorization: Bearer prueba123" https://seu-dominio-moodle/
  2. Verifique nos logs do servidor (ou com um script de teste em PHP que imprima $_SERVER['HTTP_AUTHORIZATION']) se o header está sendo recebido.

    • Se não aparecer, o servidor está descartando o header: aplique a diretiva da seção anterior.
    • Se aparecer, o header já está sendo repassado corretamente.

Tente a integração novamente

Assim que o servidor web repassar o header Authorization:

  1. Volte ao POK e copie novamente a URL dinâmica do LTI.
  2. No Moodle, vá para Site administration > Plugins > External tool > Manage tools.
  3. Cole a Tool URL copiada do POK.
  4. Clique em Add LTI Advantage para concluir o registro.

O registro deve ser concluído sem mostrar o POST_REGISTRATION_ERROR novamente.

Resumo rápido

ItemDetalhe
Erro visívelIntegration could not be completed. Code (POST_REGISTRATION_ERROR)
Erro interno do Moodlemissing_registration_token
Causa realO servidor web não repassa o header Authorization ao PHP
Solução (Apache)SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Solução (Nginx)fastcgi_param HTTP_AUTHORIZATION $http_authorization;
Ação finalRecarregar o servidor web e tentar o Add LTI Advantage novamente

Se o erro persistir depois desses passos, fale conosco em contact@pok.tech informando o domínio do seu Moodle para que possamos revisar os logs de envio do token.