Zustand
Der Paketstatus lautet Lokal implementiert und verifiziert. Die Dart- und Flutter-Unit-Test-Suite ist erfolgreich und deckt PKCE, Nonce- und ID-Token-Verifizierung, Gastfunktionen, Sitzungsablauf und Speicherverträge ab. Platform-Channel-Pfade und ein echter IdP-Roundtrip erfordern weiterhin ein Gerät oder einen Simulator. Diese Seite dokumentiert implementiertes Verhalten; sie stellt keine Aussage zur Produktionsreife dar.
Registry-Status: UNPUBLISHED. Installieren Sie dieses SDK nur aus einem Checkout des Repository-Quellcodes; verwenden Sie keine externe Paket-Registry.
Installation
Zu pubspec.yaml hinzufügen und flutter pub get ausführen:
# pubspec.yaml
dependencies:
xid:
git:
url: https://github.com/StringKe/xid
path: sdk/flutter
ref: mainPlattform-Einrichtung
Das Callback-URI-Schema auf jeder Plattform registrieren.
<!-- Android: AndroidManifest.xml (main Activity) -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="com.example.myapp" android:host="auth" />
</intent-filter>
<!-- iOS: Info.plist -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array><string>com.example.myapp</string></array>
</dict>
</array>Schnellstart
import 'package:xid/xid.dart';
final client = XidClient();
// 1. Initialize (fetches OIDC discovery). offline_access is rejected until DPoP is implemented.
await client.configure(
const XidOptions(
issuer: 'https://xid.dev',
clientId: 'YOUR_CLIENT_ID',
redirectUri: 'com.example.myapp://auth/callback',
scopes: ['openid', 'profile', 'email'],
),
);
// 2. Sign in (opens system browser, PKCE S256)
final session = await client.signIn();
print(session.user.email);
// 3. Get the current unexpired access token. Expiry requires reauthorization.
final token = await client.getAccessToken();
// 4. Get the current unexpired session.
final current = await client.getSession();
// 5. Clear secure storage and optionally open end_session. No revoke request is sent.
await client.signOut();Kern-API
| Methode | Beschreibung |
|---|---|
configure(XidOptions, {storageAdapter?}) |
SDK initialisieren und OIDC-Discovery abrufen. Muss vor allen anderenMethoden aufgerufen werden. |
signIn({}additionalParameters?, audience?}) |
Systembrowser mit PKCE-S256-Autorisierungs-URL öffnen; Code eintauschenund XidSession zurückgeben. |
handleRedirect(String url) |
App-Link- oder Custom-Scheme-Callback verarbeiten. Wird intern von signInaufgerufen; manuell aufrufen für prozessübergreifendeRedirect-Wiederherstellung. |
getSession() |
Gibt die aktuelle, nicht abgelaufene XidSession zurück oder null, nachdem der abgelaufene lokale Status gelöscht wurde. |
getAccessToken({}bool forceRefresh}) |
Gibt das aktuelle, nicht abgelaufene Zugriffstoken zurück. forceRefresh: true löscht die Sitzung und erfordert eine erneute Autorisierung. |
signOut({}bool openLogoutUrl}) |
Sicheren Speicher löschen und optional end_session_endpoint im Systembrowser öffnen; es wird keine Widerrufsanforderung gesendet. |
setTokenStorage(TokenStorageAdapter) |
Den Standard-SecureStorageAdapter (flutter_secure_storage) durch einebenutzerdefinierte Implementierung ersetzen. |
Abhängigkeiten
| Paket | Version | Zweck |
|---|---|---|
flutter_web_auth_2 |
^4.0.0 | Systembrowser-Autorisierungssitzung und Callback-Empfang |
flutter_secure_storage |
^9.2.4 | Plattformsicherer Speicher (Keychain / Keystore / DPAPI) |
crypto |
^3.0.3 | SHA-256 für die PKCE-S256-Challenge-Berechnung |
http |
^1.2.2 | HTTP-Client für Discovery- und Token-Endpunkte |
Sicherheit
- Öffentlicher Client — kein Client-Secret gespeichert oder übertragen.
- Nur PKCE S256. Kein Implicit Flow oder Password Grant.
- OAuth-State wird pro Anfrage generiert; in handleRedirect zurCSRF-Prävention validiert.
- Neue Sitzungen speichern Zugriffs- und ID-Tokens im sicheren Plattformspeicher. Das Kompatibilitätsfeld refreshToken bleibt null und offline_access wird abgelehnt, bis DPoP implementiert ist.
Bekannte Einschränkungen
- JWKS-gestützte ES256-ID-Token-Verifizierung, Nonce-Validierung und persistiertes, State-gebundenes PKCE sind implementiert und lokal getestet. Vor L4-Unterstützung sind weiterhin Validierungen mit einem echten Gerät und IdP erforderlich.
- offline_access wird abgelehnt, bis das SDK die DPoP-Absenderbindung implementiert; nach Ablauf des Zugriffstokens ist eine erneute Autorisierung erforderlich.