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

L’état du package est Implémenté et vérifié localement. La suite de tests unitaires .NET multiplateforme réussit. WebView2, DPAPI, WinUI 3 et un aller-retour réel avec un IdP nécessitent encore un environnement d’intégration Windows. Cette page documente le comportement implémenté; elle ne constitue pas une déclaration d’aptitude à la 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.

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 ProjectReference vers le checkout du code source depuis le fichier projet de votre application :

<ItemGroup>
  <ProjectReference Include="../xid/sdk/windows/Xid.Windows.csproj" />
</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 is rejected until DPoP is implemented.
});

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

// 3. Get the current unexpired access token. Expiry requires reauthorization.
string? token = await XidClient.Shared.GetAccessToken();

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

// 5. Clear local state.
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 actuelle non expirée, en effaçant l’état local expiré et en retournant null.
GetAccessToken(options?, ct) Retourner le jeton d’accès actuel non expiré; ForceRefresh efface la session et exige une nouvelle autorisation.
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