Aller au contenu

sdk/php

SDK serveur PHP 8.1+ pour la vérification JWT sans réseau,l'authentification des requêtes PSR-7 et la validation des signatureswebhook.

Afficher en Markdown

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/xid

Dé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-jwt pour la vérification ES256/RS256. Lesalgorithmes HS256 et none sont rejetés.
  • Nécessite un objet de requête PSR-7 pour authenticateRequest etverifyWebhook. Convertissez les requêtes natives du framework avecun pont PSR-7 si nécessaire.
  • Hiérarchie d’exceptions : XidException -> TokenException,JwksException, WebhookException.
Navigation

Saisissez votre recherche...

Utilisez les touches fléchées pour naviguerAppuyez sur Entrée pour sélectionnerAppuyez sur Échap pour fermer