Pular para o conteúdo principal

Autenticação e Autorização da API

1) Prefixo de endpoint

O projeto publica a REST API com prefixo /api (não /wp-json):

  • Implementação: we-dhedalos/functions/wp/rest_path.php
  • Exemplo: /api/dhedalos/v1/search

2) Token de serviço

Callback de validação

  • Função: rest_auth_validate_token
  • Arquivo: we-dhedalos/functions/rest/auth_callback.php

Regra aplicada

  1. Lê header Authorization.
  2. Remove prefixo Svc .
  3. Compara com constante API_SERVICE_TOKEN.
  4. Se token esperado não estiver definido, retorna WP_Error.
  5. Se token enviado estiver ausente/incorreto, retorna false.

Header esperado

Authorization: Svc <API_SERVICE_TOKEN>

3) Sessão WordPress

Rotas com permission_callback = is_user_logged_in exigem cookie de sessão válido.

Header típico:

Cookie: wordpress_logged_in_xxx=<SESSION_COOKIE>

4) Regras de role customizadas

user_is_admin

Arquivo: we-dhedalos/functions/utils/permission.php

  • Retorna true para roles: facilitator, supervisor, administrator.

user_is_supervisor

Arquivo: we-dhedalos/functions/utils/permission.php

  • Retorna true para roles: supervisor, administrator.

user_is_facilitator

Arquivo: we-dhedalos/functions/utils/permission.php

  • Retorna true para role: facilitator.

5) Tipos de proteção observados

TipoComo aparece no códigoExemplo
Pública__return_true/dhedalos/v1/search
Token de serviçorest_auth_validate_token/dhedalos/v1/registration/people
Sessão WPis_user_logged_in/dhedalos/v1/user
Sessão + rolecallback inline chamando user_is_admin/current_user_can/dhedalos/v1/classes/supervisor
Capacidade WP admincurrent_user_can('manage_options')/dhedalos/v1/export/users
Sem callback explícitoregister_rest_route sem permission_callback/dhedalos/v1/course/{slug}

6) Observações de risco técnico

  • Existem rotas sensíveis com permission_callback permissivo (__return_true) em partes do domínio de classes/cancelamento.
  • A autorização final de várias rotas depende de validações internas no callback, não apenas do permission_callback da rota.
  • A rota de desenroll (DELETE /dhedalos/v1/enroll/{enroll_id}) não está disponível em todos os ambientes por condição de hostname.

7) Atualizações recentes (recuperação de aula ao vivo)

  • GET /dhedalos/v1/cycles/recovery-status
    • Proteção: callback inline com is_user_logged_in.
    • Referência: we-dhedalos/functions/rest/cycles.php (register_rest_route da rota cycles/recovery-status).
  • POST /dhedalos/v1/class/{class_id}/recovery-presence/{activity}
    • Proteção: callback inline com current_user_can() da classe Classes.
    • roles_allowed: facilitator, subscriber, supervisor, administrator.
    • Referências: we-dhedalos/functions/rest/classes.php (rota e propriedade $roles_allowed).

Pendências

  • Confirmar padrão exato de métodos aceitos para rotas registradas como WP_REST_Server::EDITABLE no ambiente de execução.
  • Definir e versionar uma matriz oficial de autorização por endpoint+role (atualmente espalhada em callbacks inline).