Chaves de acesso
Uma chave de acesso permite que alguém faça login com sua impressão digital, rosto ou PIN do dispositivo, em vez de digitar uma senha. Ela fica no dispositivo, no gerenciador de senhas ou no celular, funciona apenas no site para o qual foi criada, e não pode ser falsificada ou reutilizada em outro lugar. O Power Portals Pro adiciona chaves de acesso às contas locais de um portal tanto no React quanto no Blazor: os usuários as adicionam na página da conta e depois fazem login com uma em um único passo.
Desligando as chaves de acesso
As chaves de acesso estão onde quer que as contas locais estejam (LocalAccountsEnabled, ativadas por padrão): uma chave de acesso é uma credencial local, mantida como um contato como uma senha. Para um portal que não deveria oferecer, defina PasskeysEnabled em AuthClientOptions false Program.csem . Desligado, o servidor para de fornecer as rotas da chave de acesso e recusa o login da chave de entrada, as páginas da conta param de mostrá-las, e as chaves já salvas não podem mais ser usadas.
builder.Services.Configure<AuthClientOptions>(options => options.PasskeysEnabled = false);
Importante
As chaves de acesso são mantidas na
ppp_passkeytabela, que a solução gerenciada do Power Portals Pro providencia. Importe a solução antes que as páginas de conta ofereçam as chaves de acesso e certifique-se de que o usuário da aplicação do portal detenha o papel de usuário de aplicação enviado, que carrega seus privilégios na mesa.
Nas páginas de contas
As páginas de conta geradas pelos modelos de projeto mostram chaves de acesso sempre que estão ativadas: um botão de Entrar com um botão de chave de acesso na página de login, ao lado do formulário de senha, e uma seção de Chaves de Acesso na página de perfil onde o usuário adiciona, renomeia e remove as deles. Ambas lêem passkeysEnabled de GET /api/auth/options, ou AuthClientOptions em uma página do Blazor Server, e não mostram nada enquanto as chaves de acesso estão desligadas.
Os componentes
Dois componentes, em ambas as pilhas, fazem o trabalho. PasskeySignInButton Faz login com uma chave de acesso escolhida pela pessoa e não renderiza nada em um navegador que não possa usar chaves de acesso. PasskeyManager Lista as chaves de acesso dos usuários logados e permite que ele adicione, renomeie e remova. Mostre-as apenas enquanto as chaves de acesso estiverem ativadas.
React
import { LoginResult } from '@powerportalspro/core';
import { PasskeyManager, PasskeySignInButton } from '@powerportalspro/react-fluent';
// On the sign-in page, when GET /api/auth/options reports passkeysEnabled
<PasskeySignInButton onResult={(result) => result === LoginResult.Success && navigate(returnUrl)} />
// On the signed-in user's account page
<PasskeyManager />
Blazor
@* On the sign-in page, when passkeys are on *@
<PasskeySignInButton ReturnUrl="@ReturnUrl" OnResult="OnPasskeyResult" />
@* On the signed-in user's account page *@
<PasskeyManager />
Uma vez logado, o botão Blazor carrega a página novamente em ReturnUrl, então tudo nela mostra o usuário logado. OnResult entrega à página os resultados que ela gerencia por conta própria, como uma conta bloqueada. A parte do navegador da cerimônia roda nos próprios scripts dos componentes, então eles funcionam igual sob Blazor Server, WebAssembly e Auto.
Como funciona uma cerimônia
Cada operação de chave de acesso é composta por duas solicitações, construídas sobre o suporte de ASP.NET Core Identity: a primeira retorna as opções que o navegador passa para navigator.credentials, e a segunda retorna o que o navegador respondeu. A Identity mantém o desafio entre eles em um cookie.
- Login:
POST /api/auth/passkey/request-options, entãoPOST /api/auth/passkey/login, que verifica a assinatura contra a chave pública armazenada e faz login com o usuário. Ambos contam para o limite por endereço nos formulários de login. - Gerenciando:
GET /api/auth/manage/passkeyslistar eles;POST /api/auth/manage/passkeys/creation-optionsePOST /api/auth/manage/passkeysadicionar um;/renamee/removefazer o que eles mandarem. No React,AuthClient.signInWithPasskeyAsyncecreatePasskeyAsyncrealizar uma cerimônia inteira em uma única chamada.
Segurança
- Uma chave de acesso que verifica o PIN ou a biometria da pessoa é dois fatores por si só, então um login por chave de acesso não pede código de autenticação. Uma conta bloqueada ou não confirmada é recusada, como no login por senha.
- Uma chave de acesso funciona apenas no domínio onde foi criada. Se o portal for transferido para outro domínio, ou se um slot de staging tiver seu próprio nome de host, as chaves de acesso existentes não funcionam lá. Configurado
IdentityPasskeyOptions.ServerDomainpara fixar para as quais as chaves de domínio foram feitas. ppp_passkeyé uma tabela protegida: nenhuma solicitação de portal chega a ele, seja qual for a função ou a função de segurança. O código de login e conta lê e escreve como a aplicação. O que ela contém — uma chave pública e os dados assinados pelo navegador — não é segredo.- Um administrador que se passa por usuário não pode adicionar ou remover as senhas do usuário, pois não pode mudar a senha do usuário.
- Usuários internos fazem login pelo Microsoft Entra ID, que mantém suas chaves de acesso; eles não têm nenhuma no portal.
Nota
Navegadores permitem chaves de acesso apenas em origens seguras:
https, oulocalhostdurante o desenvolvimento.
