Uso da API GKTinc (Integração sem SDK)
Objetivo
Este documento descreve o uso direto da API GKTinc para integrar a partir de qualquer linguagem (C, Java, Python, etc.) sem usar o SDK oficial.
A API fornece dois endpoints principais:
- get_challenge_level: obtém o nível de desafio para o IP atual.
- validate_challenge: valida a solução enviada pelo front-end.
Observação: os endpoints abaixo seguem o mesmo formato usado pelo SDK atual.
URL Base
https://api.guardiankey.io/
Autenticação
Todas as chamadas exigem o cabeçalho:
X-API-Key: <your_api_key>
1) Obter Nível de Desafio
Endpoint
GET /v3/tinc/{protectiongroup_hashid}/get_challenge_level/{client_ip}
Headers
X-API-Key: <your_api_key>
Content-Type: application/json
Exemplo (cURL)
curl -X GET \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
https://api.guardiankey.io/v3/tinc/YOUR_HASHID/get_challenge_level/203.0.113.10
Resposta (exemplo)
{
"action": "ACCEPT",
"challenge_level": 3,
"sign": "...",
"client_ip": "203.0.113.10",
"country": "BR",
"city": "Sao Paulo"
}
2) Validar Desafio
Endpoint
POST /v3/tinc/{protectiongroup_hashid}/validate_challenge
Headers
X-API-Key: <your_api_key>
Content-Type: application/json
Payload (JSON)
Campos obrigatórios/relevantes:
agent_id: identificador do agente/sistema (string)gktinc_solution: string base64 gerada pelo JSsalt: sha1(api_key + protectiongroup_hashid)client_ip: IP do clienteurl: host + caminho (sem o protocolo)once: identificador de sessão (ex.: session id)form_payload_size: tamanho do payload do formulário (int)form_input_element_value: valor do campo monitorado (ex.: nome de usuário)time: timestamp (epoch)challenge_level: nível de desafio (int) (opcional, recomendado)
Exemplo (cURL)
curl -X POST \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "gktinc-php-sdk-WordPress",
"gktinc_solution": "BASE64...",
"salt": "sha1(api_key+hashid)",
"client_ip": "203.0.113.10",
"url": "example.com/wp-login.php",
"once": "SESSION_ID",
"form_payload_size": 123,
"form_input_element_value": "username",
"time": 1710000000,
"challenge_level": 3
}' \
https://api.guardiankey.io/v3/tinc/YOUR_HASHID/validate_challenge
Resposta (exemplo)
{
"action": "ACCEPT",
"score": 0,
"ip_policy": "not_listed",
"country": "BR",
"city": "Sao Paulo"
}
Como gerar campos críticos
salt
salt = sha1(api_key + protectiongroup_hashid)
url
No SDK, o valor é "host + path" (sem o protocolo). Exemplo:
example.com/wp-login.php
once
Pode ser um identificador de sessão. No WordPress, use session_id().
form_payload_size
Tamanho do payload POST/GET menos o campo gktinc_solution.
No SDK:
form_payload_size = strlen(serialize(POST)) - strlen(gktinc_solution)
Fluxo completo (sem SDK)
- No back end, obtenha
client_ipe chameget_challenge_level(opcional). - No front end, carregue
gktinc-setup-latest.jse inicialize com uma configuração equivalente agktinc_config. - Ao submeter, o JS gera
gktinc_solutione o adiciona ao POST. - No back end, chame
validate_challengecom o payload completo. - Se
action == BLOCK, negue o acesso; caso contrário, aceite.
Observações importantes
- Sem o JS da GKTinc não há
gktinc_solutione a validação irá falhar. - Se sua integração for fail-open, pule a validação quando
gktinc_solutionnão estiver presente. - O endpoint base é HTTPS; evite desabilitar SSL em produção.