.NET 10 - Apresentando o recurso passkey


 O recurso de passkeys no ASP.NET Core Identity é uma das novidades mais interessantes e relevantes do .NET 10, e, hoje vou apresentar este recurso.

Com o .NET 10, uma das novidades mais significativas é o suporte nativo para passkeys (chaves de acesso) diretamente no ASP.NET Core Identity. Este recurso representa um passo crucial em direção a um futuro sem senhas, oferecendo um método de autenticação mais seguro, rápido e resistente a phishing.



O Que São Passkeys e Por Que São Importantes?

Uma passkey é uma credencial digital que substitui a necessidade de senhas tradicionais. Em vez de memorizar uma combinação de caracteres, o usuário utiliza a biometria (como Face ID, Touch ID, Windows Hello) ou um PIN do dispositivo para se autenticar.

Conceito Central: Criptografia Assimétrica

O funcionamento das passkeys é baseado em criptografia de chave pública-privada, um padrão robusto promovido pela FIDO Alliance e pelo W3C. O processo se divide em duas etapas principais:

1- Registro: Quando um usuário cria uma passkey para um site ou aplicativo, o dispositivo (como um smartphone ou notebook) gera um par de chaves criptográficas.

      a-) A chave privada é armazenada de forma segura no dispositivo e nunca sai de lá. Ela é protegida por hardware especializado, como o Secure Enclave da Apple ou o TPM do Windows.

      b-) A chave pública é enviada para o servidor da aplicação e associada à conta do usuário.

2- Autenticação: Para fazer login, o servidor envia um "desafio" para o dispositivo. O dispositivo usa a chave privada para "assinar" esse desafio, provando a identidade do usuário sem nunca expor a chave. O servidor, por sua vez, verifica essa assinatura usando a chave pública que ele armazenou.

Principais Vantagens:

Resistência a Phishing: Como a chave privada nunca é transmitida pela rede e está vinculada ao domínio do site, é praticamente impossível para um invasor roubá-la através de ataques de phishing.

Segurança Aprimorada: Elimina o risco de vazamento de senhas, pois o servidor armazena apenas a chave pública, que é inútil sem sua contraparte privada.

Experiência do Usuário Simplificada: O login se torna mais rápido e fácil, sem a necessidade de lembrar ou digitar senhas complexas.

Sincronização entre Dispositivos: Grandes provedores como Apple, Google e Microsoft permitem que as passkeys sejam sincronizadas na nuvem (via iCloud Keychain ou Gerenciador de Senhas do Google), permitindo que o usuário acesse suas contas de qualquer um de seus dispositivos.

Onde e Quando usar Passkeys ?

As passkeys são ideais para qualquer aplicação que exija autenticação de usuários, desde e-commerces e redes sociais até sistemas corporativos internos. Elas devem ser consideradas como o método de autenticação primário ou, no mínimo, uma alternativa moderna e segura às senhas.

Com a adoção crescente por gigantes da tecnologia, os usuários estão se familiarizando com essa forma de login. Oferecer suporte a passkeys não é apenas um avanço em segurança, mas também uma melhoria na experiência do usuário que muitos já esperam encontrar.

Passkeys no .NET 10: O Que Mudou?

Antes do .NET 10, a implementação de passkeys (baseadas no padrão WebAuthn) em aplicações ASP.NET Core exigia o uso de bibliotecas de terceiros, como a fido2-net-lib, e uma configuração manual considerável.

O .NET 10 simplifica drasticamente esse processo ao integrar o suporte a WebAuthn diretamente no ASP.NET Core Identity.

As principais novidades são:

Habilitação por Padrão: O suporte a passkeys pode ser ativado com uma única linha de código.

Integração com a UI do Identity: Os templates de projeto, como o Blazor Web App, já incluem botões e páginas para "Entrar com uma Passkey" e "Registrar uma Passkey".

Armazenamento Integrado: As credenciais de passkey são vinculadas aos usuários do Identity sem a necessidade de criar modelos de dados adicionais no Entity Framework

Habilitando Passkeys em uma Aplicação Blazor no .NET 10

Vamos ver como é simples adicionar suporte a passkeys em uma nova aplicação Blazor Web App com contas individuais.

Pré-requisitos:
- SDK do .NET 10 (Preview/RC1 ou superior).
- Um dispositivo com um autenticador, como Windows Hello (biometria ou PIN), Touch ID/Face ID em um Mac, ou um leitor de impressão digital em um celular.(Ou testar usando o navegador)

Criando o Projeto

AbraEu vou usar o VS 2026 Insiders e criar um novo projeto usando o template  Blazor Web App com o nome MinhaAppComPasskeys

Você pode também abrir um terminal de comandos e executar o seguinte comando para criar uma nova Blazor Web App com autenticação individual. A seguir pode prosseguir usando o VS Code como editor de código.


dotnet new blazor
--auth Individual -n MinhaAppComPasskeys

cd MinhaAppComPasskeys

Agora abra o arquivo Program.cs e localize a configuração do AddIdentityCore.

builder.Services.AddIdentityCore<ApplicationUser>(options =>
    {
        // Exige que o usuário confirme seu e-mail antes de poder fazer login.
        options.SignIn.RequireConfirmedAccount = true;
        // ESTA É A LINHA IMPORTANTE E NOVA!
        // Define a versão do esquema do banco de dados do Identity.
        // A versão 3 é necessária para suportar as tabelas de passkeys.
        options.Stores.SchemaVersion = IdentitySchemaVersions.Version3;
    })
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddSignInManager()
    .AddDefaultTokenProviders(); 

O template do Blazor Web App já vem com essa linha por padrão no .NET 10, o que significa que o suporte a passkeys já está habilitado no código desde o início!.Vamos entender o código:

AddIdentityCore<ApplicationUser>: Esta é a versão mais "enxuta" para configurar o Identity. Ela adiciona os serviços principais de gerenciamento de usuários (UserManager), mas não inclui cookies de autenticação, gerenciamento de roles ou o SignInManager por padrão. É ideal para cenários de API ou quando você quer controle total.

options.Stores.SchemaVersion = IdentitySchemaVersions.Version3; : Esta é a novidade crucial no .NET 10. Em vez de uma flag booleana como options.Passkeys.Enabled, a equipe do ASP.NET Core optou por uma abordagem baseada na versão do esquema do banco de dados. Ao definir a versão para Version3, você está sinalizando para o Entity Framework e para o Identity que o banco de dados deve incluir as novas tabelas e colunas necessárias para o suporte a WebAuthn (passkeys). Isso habilita implicitamente o recurso.

.AddEntityFrameworkStores<ApplicationDbContext>(): Conecta o Identity ao seu banco de dados via Entity Framework.

.AddSignInManager(): Adiciona o SignInManager, que é essencial para gerenciar as operações de login e logout, incluindo o fluxo de cookies.

.AddDefaultTokenProviders(): Adiciona os provedores para gerar tokens (ex: para confirmação de e-mail, reset de senha).

Com o Identity configurado, precisamos criar as tabelas no banco de dados para armazenar os dados dos usuários e as informações das passkeys. Vamos usar a ferramenta dotnet ef que tem que estar instalada.

Estando na pasta do projeto execute o comando : dotnet ef database update

Isso vai criar o arquivo de banco de dados (por padrão, um app.db SQLite) com todas as tabelas necessárias (AspNetUsers, AspNetUserTokens, etc.).

Testando o projeto criado

Após concluir esta etapa podemos excutar o projeto onde iremos obter a seguinte página:

Acesse a aplicação em seu navegador (lembre-se de usar HTTPS, pois é um requisito para WebAuthn).

Registre um novo usuário: Crie uma conta normalmente, com e-mail e senha.

Gerencie sua conta: Após o login, vá para a página de gerenciamento de conta (geralmente em /Account/Manage). Você verá uma nova opção para registrar uma passkey.

Registre a Passkey: Ao clicar para registrar, seu navegador e sistema operacional solicitarão que você use seu método de autenticação (Windows Hello, Touch ID, PIN, etc.) para criar e salvar a chave.

Para o nosso exemplo será usado um PIN que deve ser informado na tela: Salvar sua chave de acesso

A seguir você deve informar um nome para a passkey criada:

Faça Login com a Passkey: Faça logout e volte para a página de login. Agora, você pode usar o botão "Sign in with a Passkey". O sistema pedirá novamente a verificação biométrica ou PIN, e você estará autenticado sem digitar nenhuma senha.

Pronto agora basta fazer o login informando o seu PIN (para o nosso exemplo):

Desta forma, o suporte nativo a passkeys no .NET 10 é um marco para os desenvolvedores ASP.NET Core. Ele remove a complexidade de implementação, permitindo que qualquer aplicação adote facilmente um dos métodos de autenticação mais seguros e modernos disponíveis.

Ao alinhar-se com os padrões da indústria e as expectativas dos usuários, a Microsoft está capacitando os desenvolvedores a construir aplicações mais seguras e com uma experiência de usuário superior, pavimentando o caminho para um futuro verdadeiramente sem senhas.

E estamos conversados...  

"Trabalhai, não pela comida que perece, mas pela comida que permanece para a vida eterna, a qual o Filho do homem vos dará; porque a este o Pai, Deus, o selou."
João 6:27

Referências:


José Carlos Macoratti