Aller au contenu

sdk/windows

SDK C# / .NET pour les applications WinUI 3 utilisant WebView2 pourl'autorisation, PKCE S256 et IsolatedStorage protégé par DPAPI pour lapersistance des jetons.

Afficher en Markdown

Statut

Le statut du package est Implémenté · vérifié localement. dotnettest passe 19 cas (build cross-platform net8.0 et net10.0). Les APIspécifiques à Windows (WebView2, DPAPI, WinUI 3) nécessitent unenvironnement de build Windows pour être vérifiées. L’aller-retour réelavec un IdP est en attente de vérification manuelle. Cette page documentele comportement implémenté ; ce n’est pas une affirmation de disponibilitéen production.

Prérequis

  • .NET 8 et Windows App SDK 1.6+
  • WebView2 Runtime (Evergreen — préinstallé avec Microsoft Edge)
  • L’application doit définir <UseWinUI>true</UseWinUI> dans le fichier deprojet

Installation

Ajoutez une PackageReference à votre fichier de projet d’application :

<ItemGroup>
  <PackageReference Include="Xid.Windows" Version="0.1.0" />
</ItemGroup>

Démarrage rapide

using Xid.Windows;

// 1. Configure in App.xaml.cs OnLaunched
XidClient.Shared.Configure(new XidConfiguration
{
    Issuer      = new Uri("https://xid.dev"),
    ClientId    = "your_client_id",
    RedirectUri = "com.example.myapp://auth/callback",
    // Scopes default: openid profile email offline_access
});

// 2. Sign in (opens embedded WebView2 window)
XidSession session = await XidClient.Shared.SignInAsync();
Console.WriteLine($"Signed in: {session.User.Email}");

// 3. Get a valid access token (auto-refresh)
string? token = await XidClient.Shared.GetAccessToken();

// 4. Get current session
XidSession? current = await XidClient.Shared.GetSession();

// 5. Sign out
await XidClient.Shared.SignOut();

Callback de schéma URI personnalisé (optionnel)

Si vous utilisez une redirection de schéma URI personnalisé plutôt que lafenêtre WebView2 intégrée, transmettez l’URI d’activation du protocole àHandleRedirectAsync :

// App.xaml.cs
protected override void OnActivated(IActivatedEventArgs args)
{
    if (args.Kind == ActivationKind.Protocol)
    {
        var protocolArgs = (ProtocolActivatedEventArgs)args;
        await XidClient.Shared.HandleRedirectAsync(protocolArgs.Uri);
    }
}

API principale

Méthode Description
Configure(XidConfiguration) Initialiser le SDK. À appeler une seule fois au démarrage del’application.
SignInAsync(options?, ct) Ouvrir une fenêtre d’autorisation WebView2 intégrée avec PKCE S256.Retourne XidSession à la fin.
HandleRedirectAsync(Uri, ct) Traiter un callback de schéma URI personnalisé et échanger le coded’autorisation.
GetSession(ct) Retourner la session courante, en rafraîchissant automatiquement si prochede l’expiration.
GetAccessToken(options?, ct) Retourner une chaîne de jeton d’accès valide, en déclenchant unrafraîchissement si nécessaire.
SignOut(ct) Effacer les jetons de session locaux depuis IsolatedStorage protégé parDPAPI.
SetTokenStorage(ITokenStorage) Remplacer le DpapiTokenStorage par défaut par une implémentationpersonnalisée d’ITokenStorage.

Adaptateur de stockage

Le stockage par défaut chiffre les jetons avec DPAPI (portée CurrentUser)et les conserve dans IsolatedStorage. Implémentez ITokenStoragepour utiliser Windows Hello ou le Gestionnaire d’informationsd’identification :

public sealed class MyCustomStorage : ITokenStorage
{
    public Task SaveAsync(StoredTokenSet tokens, CancellationToken ct = default) { ... }
    public Task<StoredTokenSet?> LoadAsync(CancellationToken ct = default) { ... }
    public Task ClearAsync(CancellationToken ct = default) { ... }
}
XidClient.Shared.SetTokenStorage(new MyCustomStorage());

Dépendances

Package Version Objectif
Microsoft.WindowsAppSDK 1.6.250228002 Hôte WinUI 3 et intégration WebView2
Microsoft.Web.WebView2 1.0.3065.39 Fenêtre d’autorisation embarquée basée sur Chromium
System.Security.Cryptography.ProtectedData 8.0.0 Chiffrement des jetons au repos avec DPAPI

Sécurité

  • Client public — aucun secret client stocké ni transmis.
  • PKCE S256 uniquement. Le serveur rejette la méthode plain challenge.
  • Jetons chiffrés avec DPAPI (portée CurrentUser) et stockés dansIsolatedStorage. Non accessibles aux autres comptes Windows.
  • État OAuth généré par requête ; validé lors de la redirection pourprévenir le CSRF.

Limites connues

  • WebView2 Runtime doit être présent. La prise en charge deWebAuthenticationBroker comme solution de repli est prévue mais pas encoreimplémentée.
  • La verification du jeton ID par JWKS et la deconnexion end_session sont implementees et testees localement. Les validations Windows WebView2, DPAPI et IdP restent requises avant L4.
  • DpapiTokenStorage ne fonctionne pas sur les plateformes non Windows.Utilisez une autre implémentation d’ITokenStorage lors de la compilationcroisée.
Navigation

Saisissez votre recherche...

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