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.