Statut
Implémenté et vérifié localement. La vérification aller-retour avec unvrai IdP (récupération JWKS, signature/vérification de jeton contre uneinstance XID active) n’a pas encore été effectuée et doit être complétéeavant toute utilisation en production.
Statut du registre : UNPUBLISHED. Installez ce SDK uniquement depuis un checkout du code source du dépôt ; n’utilisez pas de registre de paquets externe.
L’authentification des requêtes accepte uniquement Bearer par défaut. Un cookie JWT détenu par l’application n’est lu que lorsque son nom exact est configuré. Le cookie Core opaque __Host-xid.rt.* n’est jamais recherché ni vérifié localement ; échangez-le en transférant le header Cookie complet vers le POST /v1/sessions/token de même origine exacte, avec les redirections désactivées, et n’acceptez qu’une réponse contenant uniquement le champ token.
Installer
PHP 8.1+ requis. Les dépendances principales sont récupéréesautomatiquement par Composer.
{
"repositories": [
{ "type": "path", "url": "../xid/sdk/php" }
],
"require": {
"xid/xid": "dev-main"
}
}
# composer update xid/xidDémarrage rapide
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);
}Authentifier une requête 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,
);Vérifier le 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);
}Options XidClient
| Clé | Défaut | Description |
|---|---|---|
issuer |
requis | URI d’émetteur XID |
audience |
null |
Audience attendue ; null ignore la validation |
cache |
null |
CacheInterface PSR-16 pour la mise en cache JWKS |
jwks_ttl |
3600 |
TTL du cache JWKS en secondes |
clock_leeway |
0 |
Tolérance au décalage d’horloge JWT en secondes |
cookie_name |
disabled |
Nom du cookie JWT détenu par l’application ; désactivé sauf configuration explicite |
Méthodes XidClient
| Méthode | Retourne | Description |
|---|---|---|
verifyToken(string $token) |
Claims |
Vérifier la chaîne JWT ; lève une exception en cas d’échec |
authenticateRequest(ServerRequestInterface $request) |
AuthResult |
Authentifier une requête PSR-7 ; ne lève pas d’exception |
verifyWebhook(ServerRequestInterface $request, string $secret) |
WebhookPayload |
Valider la signature webhook ; lève une exception en cas d’échec |
refreshJwks() |
void |
Forcer le rafraîchissement du cache JWKS |
Notes de plateforme
- Utilise
firebase/php-jwtpour la vérification ES256/RS256. Lesalgorithmes HS256 etnonesont rejetés. - Nécessite un objet de requête PSR-7 pour
authenticateRequestetverifyWebhook. Convertissez les requêtes natives du framework avecun pont PSR-7 si nécessaire. - Hiérarchie d’exceptions :
XidException->TokenException,JwksException,WebhookException.