Estado
Implementado e verificado localmente. A verificação de ida e voltacom um IdP real (busca de JWKS, assinatura/verificação de tokencontra uma instância XID ativa) ainda não foi realizada e deve serconcluída antes do uso em produção.
Status do registry: UNPUBLISHED. Instale este SDK somente a partir do checkout do código-fonte do repositório; não use um registry de pacotes externo.
A autenticação de requisições aceita somente Bearer por padrão. Um cookie JWT pertencente ao aplicativo só é lido quando seu nome exato é configurado. O cookie opaco do Core __Host-xid.rt.* nunca é pesquisado nem verificado localmente; troque-o encaminhando o header Cookie completo para o POST /v1/sessions/token da mesma origem exata, com redirects desativados, e aceite somente uma resposta que contenha apenas o campo token.
Instalar
PHP 8.1+ obrigatório. As dependências principais são baixadasautomaticamente pelo Composer.
{
"repositories": [
{ "type": "path", "url": "../xid/sdk/php" }
],
"require": {
"xid/xid": "dev-main"
}
}
# composer update xid/xidInício rápido
use Xid\XidClient;
use Xid\Exception\TokenException;
use Xid\Exception\JwksException;
$xid = new XidClient([
'issuer' => 'https://xid.dev',
'audience' => 'your-client-id',
'cache' => $psrSimpleCacheImpl, // PSR-16; null disables JWKS cache
]);
try {
$claims = $xid->verifyToken($jwtString);
echo $claims->sub(); // user ID
echo $claims->scope(); // "openid profile email"
echo implode(',', $claims->amr()); // "phr" / "otp"
} catch (TokenException $e) {
http_response_code(401);
} catch (JwksException $e) {
http_response_code(503);
}Autentica uma requisição PSR-7
$result = $xid->authenticateRequest($psrRequest);
if ($result->isAuthenticated()) {
$userId = $result->claims()->sub();
} else {
// $result->reason() for server-side logs only
http_response_code(401);
}
$token = $xid->exchangeSessionToken(
'https://app.example.com/account',
$psrRequest->getHeaderLine('Cookie'),
$sessionTokenTransport,
);Verifica webhook
use Xid\Exception\WebhookException;
try {
$payload = $xid->verifyWebhook($psrRequest, 'whsec_...');
$type = $payload->type(); // "user.created"
$data = $payload->data();
} catch (WebhookException $e) {
http_response_code(400);
}Opções do XidClient
| Chave | Padrão | Descrição |
|---|---|---|
issuer |
obrigatório | URI do emissor XID |
audience |
null |
Audiência esperada; null ignora a validação |
cache |
null |
CacheInterface PSR-16 para cache de JWKS |
jwks_ttl |
3600 |
TTL do cache JWKS em segundos |
clock_leeway |
0 |
Tolerância de desvio de relógio JWT em segundos |
cookie_name |
disabled |
Nome do cookie JWT pertencente ao aplicativo; desativado salvo configuração explícita |
Métodos do XidClient
| Método | Retornos | Descrição |
|---|---|---|
verifyToken(string $token) |
Claims |
Verifica string JWT; lança exceção em caso de falha |
authenticateRequest(ServerRequestInterface $request) |
AuthResult |
Autentica requisição PSR-7; não lança exceções |
verifyWebhook(ServerRequestInterface $request, string $secret) |
WebhookPayload |
Valida a assinatura do webhook; lança exceção em caso de falha |
refreshJwks() |
void |
Forçar atualização do cache JWKS |
Notas da plataforma
- Usa
firebase/php-jwtpara verificação ES256/RS256. Osalgoritmos HS256 enonesão rejeitados. - Requer um objeto de requisição PSR-7 para
authenticateRequesteverifyWebhook. Converta requisições nativas do framework comuma ponte PSR-7 se necessário. - Hierarquia de exceções:
XidException->TokenException,JwksException,WebhookException.