Ir para o conteúdo

sdk/windows

SDK C# / .NET para aplicações WinUI 3 usando WebView2 paraautorização, PKCE S256 e IsolatedStorage protegido por DPAPI parapersistência de tokens.

Ver como Markdown

Estado

O status do package é Implementado e verificado localmente. A suíte de testes unitários .NET multiplataforma passa. WebView2, DPAPI, WinUI 3 e um ciclo completo com um IdP real ainda exigem um ambiente de integração Windows. Esta página documenta o comportamento implementado; não é uma declaração de prontidão para produção.

Status do registry: UNPUBLISHED. Instale este SDK somente a partir do checkout do código-fonte do repositório; não use um registry de pacotes externo.

Requisitos

  • .NET 8 e Windows App SDK 1.6+
  • WebView2 Runtime (Evergreen — pré-instalado com o Microsoft Edge)
  • O aplicativo deve definir <UseWinUI>true</UseWinUI> no arquivo deprojeto

Instalação

Adicione uma ProjectReference para o checkout do código-fonte no arquivo de projeto do aplicativo:

<ItemGroup>
  <ProjectReference Include="../xid/sdk/windows/Xid.Windows.csproj" />
</ItemGroup>

Início rápido

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 esquema de URI personalizado (opcional)

Se usar um redirecionamento de esquema de URI personalizado em vez dajanela incorporada WebView2, encaminhe o URI de ativação do protocolopara 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 principal

Método Descrição
Configure(XidConfiguration) Inicializa o SDK. Chame uma vez na inicialização do aplicativo.
SignInAsync(options?, ct) Abre uma janela de autorização WebView2 incorporada com PKCE S256.Retorna XidSession ao concluir.
HandleRedirectAsync(Uri, ct) Processa um callback de esquema de URI personalizado e troca o códigode autorização.
GetSession(ct) Retornar a sessão atual não expirada, limpando o estado local expirado e retornando null.
GetAccessToken(options?, ct) Retornar o token de acesso atual não expirado; ForceRefresh limpa a sessão e exige nova autorização.
SignOut(ct) Limpa os tokens de sessão locais do IsolatedStorage protegido porDPAPI.
SetTokenStorage(ITokenStorage) Substitua o DpapiTokenStorage padrão por uma implementaçãopersonalizada de ITokenStorage.

Adaptador de armazenamento

O armazenamento padrão criptografa os tokens com DPAPI (escopoCurrentUser) e os persiste no IsolatedStorage. ImplementeITokenStorage para usar o Windows Hello ou o CredentialManager:

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());

Dependências

Pacote Versão Finalidade
Microsoft.WindowsAppSDK 1.6.250228002 Host WinUI 3 e incorporação do WebView2
Microsoft.Web.WebView2 1.0.3065.39 Janela de autorização incorporada baseada em Chromium
System.Security.Cryptography.ProtectedData 8.0.0 Criptografia de tokens em repouso com DPAPI

Segurança

  • Cliente público — nenhum segredo de cliente armazenado ou transmitido.
  • Apenas PKCE S256. O servidor rejeita o método de desafio plain.
  • Tokens criptografados com DPAPI (escopo CurrentUser) e armazenados noIsolatedStorage. Não acessíveis a outras contas de usuário do Windows.
  • State OAuth gerado por requisição; validado no redirecionamento paraprevenir CSRF.

Limitações conhecidas

  • O WebView2 Runtime deve estar presente. O suporte aWebAuthenticationBroker como fallback está planejado, mas ainda nãoimplementado.
  • A verificacao de ID token com JWKS e o sign-out end_session estao implementados e testados localmente. As validacoes de Windows WebView2, DPAPI e IdP ainda sao necessarias para L4.
  • DpapiTokenStorage não funciona em plataformas não-Windows. Use umaimplementação diferente de ITokenStorage ao compilar de forma cruzada.
Navegação

Digite para pesquisar...

Use as teclas de seta para navegarPressione Enter para selecionarPressione Escape para fechar