Aller au contenu

sdk/flutter

SDK Dart / Flutter pour iOS, Android et bureau utilisantflutter_web_auth_2, le flux de code d'autorisation PKCE S256 et lapersistance des jetons via flutter_secure_storage.

Afficher en Markdown

Statut

Le statut du package est Implémenté · vérifié localement. Les testsunitaires Dart pur (21 réussis) couvrent PKCE, les modèles de jetons et lestockage en mémoire. Les chemins via canaux de plateforme(flutter_secure_storage, flutter_web_auth_2) nécessitent un vrai appareilou simulateur pour être vérifiés. L’aller-retour réel avec un IdP est enattente de vérification manuelle. Cette page documente le comportementimplémenté ; ce n’est pas une affirmation de disponibilité en production.

Installation

Ajoutez dans pubspec.yaml et exécutez flutter pub get :

# pubspec.yaml
dependencies:
  xid:
    git:
      url: https://github.com/StringKe/xid
      path: sdk/flutter
      ref: main

Configuration de la plateforme

Enregistrez le schéma URI de callback sur chaque plateforme.

<!-- 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>

Démarrage rapide

import 'package:xid/xid.dart';

final client = XidClient();

// 1. Initialize (fetches OIDC discovery)
await client.configure(
  const XidOptions(
    issuer: 'https://xid.dev',
    clientId: 'YOUR_CLIENT_ID',
    redirectUri: 'com.example.myapp://auth/callback',
    scopes: ['openid', 'profile', 'email', 'offline_access'],
  ),
);

// 2. Sign in (opens system browser, PKCE S256)
final session = await client.signIn();
print(session.user.email);

// 3. Get valid access token (auto-refreshes)
final token = await client.getAccessToken();

// 4. Get current session
final current = await client.getSession();

// 5. Sign out (revokes refresh token + clears secure storage)
await client.signOut();

API principale

Méthode Description
configure(XidOptions, {storageAdapter?}) Initialiser le SDK et récupérer la découverte OIDC. Doit être appelé avanttoutes les autres méthodes.
signIn({}additionalParameters?, audience?}) Ouvrir le navigateur système avec l’URL d’autorisation PKCE S256 ;échanger le code et retourner XidSession.
handleRedirect(String url) Traiter un callback App Link ou de schéma personnalisé. Appelé en internepar signIn ; invoquer manuellement pour la récupération de redirectioninter-processus.
getSession() Retourner XidSession? — déclenche la rotation du jeton d’actualisation sile jeton d’accès est proche de l’expiration (dans les 60 s).
getAccessToken({}bool forceRefresh}) Retourner une chaîne de jeton d’accès valide. Passez forceRefresh: truepour forcer le renouvellement.
signOut({}bool openLogoutUrl}) Révoquer le jeton d’actualisation (RFC 7009), vider le stockage sécuriséet ouvrir optionnellement end_session_endpoint dans le navigateur.
setTokenStorage(TokenStorageAdapter) Remplacer le SecureStorageAdapter par défaut (flutter_secure_storage) parune implémentation personnalisée.

Dépendances

Package Version Objectif
flutter_web_auth_2 ^4.0.0 Session d’autorisation via le navigateur système et réception du callback
flutter_secure_storage ^9.2.4 Stockage sécurisé de la plateforme (Keychain / Keystore / DPAPI)
crypto ^3.0.3 SHA-256 pour le calcul du challenge PKCE S256
http ^1.2.2 Client HTTP pour les points de terminaison de découverte et de jeton

Sécurité

  • Client public — aucun secret client stocké ni transmis.
  • PKCE S256 uniquement. Pas de flux implicite ni de grant par mot de passe.
  • État OAuth généré par requête ; validé dans handleRedirect pour prévenirle CSRF.
  • Les jetons d’actualisation sont stockés dans le stockage sécurisé de laplateforme (Keychain sur iOS, Keystore sur Android) et tournés à chaqueutilisation par le serveur XID.

Limites connues

  • La verification ES256 du jeton ID par JWKS, PKCE persistant par state et refresh single-flight sont implementes et testes localement. Des validations sur appareil reel et IdP restent requises avant le support L4.
  • offline_access doit être inclus dans les portées pour recevoir un jetond’actualisation.
Navigation

Saisissez votre recherche...

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