Zum Inhalt springen

sdk/php

PHP-8.1+-Server-SDK für netzwerklose JWT-Prüfung,PSR-7-Anfrage-Authentifizierung und Webhook-Signaturvalidierung.

Als Markdown anzeigen

Zustand

Implementiert und lokal verifiziert. Die echteIdP-Round-Trip-Verifizierung (JWKS-Abruf, Token-Signierung/Prüfung gegeneine Live-XID-Instanz) wurde noch nicht durchgeführt und muss vor demProduktionseinsatz abgeschlossen werden.

Registry-Status: UNPUBLISHED. Installieren Sie dieses SDK nur aus einem Checkout des Repository-Quellcodes; verwenden Sie keine externe Paket-Registry.

Die Anfrageauthentifizierung akzeptiert standardmäßig nur Bearer. Ein anwendungseigenes JWT-Cookie wird nur gelesen, wenn sein exakter Name konfiguriert ist. Das opake Core-Cookie __Host-xid.rt.* wird niemals durchsucht oder lokal verifiziert; tauschen Sie es aus, indem Sie den vollständigen Cookie-Header ohne Weiterleitungen an den exakt gleichursprünglichen Endpunkt POST /v1/sessions/token weiterleiten, und akzeptieren Sie nur eine Antwort, die ausschließlich das Feld token enthält.

Installieren

PHP 8.1+ erforderlich. Kern-Abhängigkeiten werden automatisch von Composerbezogen.

{
  "repositories": [
    { "type": "path", "url": "../xid/sdk/php" }
  ],
  "require": {
    "xid/xid": "dev-main"
  }
}

# composer update xid/xid

Schnellstart

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);
}

PSR-7-Anfrage authentifizieren

$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,
);

Webhook prüfen

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);
}

XidClient-Optionen

Schlüssel Standard Beschreibung
issuer erforderlich XID-Issuer-URI
audience null Erwartetes audience; null überspringt die Validierung
cache null PSR-16-CacheInterface für JWKS-Caching
jwks_ttl 3600 JWKS-Cache-TTL in Sekunden
clock_leeway 0 JWT-Taktversatztoleranz in Sekunden
cookie_name disabled Name des anwendungseigenen JWT-Cookies; nur bei expliziter Konfiguration aktiviert

XidClient-Methoden

Methode Gibt zurück Beschreibung
verifyToken(string $token) Claims JWT-String prüfen; wirft bei Fehler Exception
authenticateRequest(ServerRequestInterface $request) AuthResult PSR-7-Anfrage authentifizieren; wirft keine Exception
verifyWebhook(ServerRequestInterface $request, string $secret) WebhookPayload Webhook-Signatur validieren; wirft bei Fehler Exception
refreshJwks() void JWKS-Cache erzwungen aktualisieren

Plattformhinweise

  • Verwendet firebase/php-jwt für ES256/RS256-Prüfung. HS256 undnone-Algorithmus werden abgelehnt.
  • Erfordert ein PSR-7-Anfrageobjekt für authenticateRequest undverifyWebhook. Framework-native Anfragen bei Bedarf mit einerPSR-7-Bridge konvertieren.
  • Ausnahmehierarchie: XidException -> TokenException,JwksException, WebhookException.
Navigation

Suchbegriff eingeben...

Mit den Pfeiltasten navigierenEingabetaste zum AuswählenEscape zum Schließen