Claves de acceso
Una llave de acceso permite a alguien iniciar sesión con su huella digital, rostro o PIN del dispositivo en lugar de escribir una contraseña. Se guarda en su dispositivo, en el gestor de contraseñas o en su teléfono, solo funciona en la web para la que fue creada y no puede ser phishing ni reutilizada en otro lugar. Power Portals Pro añade claves de acceso a las cuentas locales de un portal tanto en React como en Blazor: los usuarios las añaden en su página de cuenta y luego inician sesión con una en un solo paso.
Desactivando las claves de acceso
Las claves de acceso están en donde estén las cuentas locales (LocalAccountsEnabled, activadas por defecto): una clave de acceso es una credencial local, que se mantiene como una contraseña para un contacto. Para un portal que no debería ofrecerlas, se pone PasskeysEnabled en AuthClientOptions false Program.cs. Desactivado, el servidor deja de servir las rutas de la clave de acceso y se niega a iniciar sesión con la clave, las páginas de la cuenta dejan de mostrarlas y las claves de acceso ya guardadas ya no pueden usarse.
builder.Services.Configure<AuthClientOptions>(options => options.PasskeysEnabled = false);
Importante
Las claves de acceso se mantienen en la
ppp_passkeytabla, que la solución gestionada de Power Portals Pro provisiona. Importa la solución antes de que las páginas de cuenta ofrezcan claves de acceso y asegúrate de que el usuario de la aplicación del portal tenga el rol de usuario de aplicación enviada, que tiene sus privilegios en la mesa.
En las páginas de cuentas
Las páginas de cuenta que generan las plantillas de proyecto muestran claves de acceso siempre que están activadas: un botón de Iniciar sesión con un botón de clave de acceso en la página de inicio de sesión, junto al formulario de contraseña, y una sección de Claves de acceso en la página de perfil donde el usuario añade, renombra y elimina las suyas. Ambas leen passkeysEnabled desde GET /api/auth/options, o AuthClientOptions en una página de Blazor Server, y no muestran nada mientras las claves de acceso están apagadas.
Los componentes
Dos componentes, en ambas pilas, hacen el trabajo. PasskeySignInButton Inicia sesión con una clave de acceso que elija la persona y no muestra nada en un navegador que no pueda usar claves de acceso. PasskeyManager Lista las claves de acceso de los usuarios que han iniciado sesión y les permite añadirlas, renombrarlas y eliminarlas. Muéstranlas solo mientras las claves de acceso estén activadas.
Reaccionar
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 />
Una vez iniciado sesión, el botón Blazor carga la página de nuevo en ReturnUrl, así que todo lo que aparece ve el usuario iniciado sesión. OnResult Entrega a la página los resultados que gestiona por sí misma, como una cuenta bloqueada. La parte del navegador de la ceremonia se ejecuta con los propios scripts de los componentes, así que funcionan igual bajo Blazor Server, WebAssembly y Auto.
Cómo funciona una ceremonia
Cada operación de clave de acceso son dos solicitudes, basadas en el soporte de ASP.NET clave de acceso de Core Identity: la primera devuelve las opciones que el navegador pasa a navigator.credentials, y la segunda devuelve lo que el navegador ha respondido. Identity mantiene el desafío entre ellos en una cookie.
- Iniciando sesión:
POST /api/auth/passkey/request-options, luegoPOST /api/auth/passkey/login, que comprueba la firma con la clave pública almacenada y inicia sesión con el usuario. Ambos cuentan para el límite por dirección en los formularios de inicio de sesión. - Gestionando:
GET /api/auth/manage/passkeyslos enumera;POST /api/auth/manage/passkeys/creation-optionsyPOST /api/auth/manage/passkeysañade uno;/renamey/removehaz lo que te digan. En React,AuthClient.signInWithPasskeyAsyncycreatePasskeyAsynchaz toda una ceremonia en una sola llamada.
Seguridad
- Una clave de acceso que compruebe el PIN o la biometría de la persona es de dos factores en sí misma, por lo que un inicio de sesión con clave no pide código de autenticación. Una cuenta bloqueada o no confirmada es rechazada, como en el inicio de sesión con contraseña.
- Una clave de acceso solo funciona en el dominio en el que fue creada. Si el portal se mueve a otro dominio, o una ranura de staging tiene su propio nombre de host, las claves de acceso existentes no funcionan allí. Configurado
IdentityPasskeyOptions.ServerDomainpara fijar las claves de acceso de dominio. ppp_passkeyes una tabla protegida: ninguna solicitud de portal llega a ella, sea cual sea la asignación de un rol o de seguridad. El código de inicio de sesión y de cuenta lo lee y escribe como la aplicación. Lo que contiene — una clave pública y los datos que firmó el navegador — no es secreto.- Un administrador que se hace pasar por un usuario no puede añadir ni eliminar las claves de acceso del usuario, ya que no puede cambiar la contraseña del usuario.
- Los usuarios internos inician sesión a través del ID de Microsoft Entra, que conserva sus claves de entrada; no tienen ninguna en el portal.
Nota
Los navegadores permiten claves de acceso solo en orígenes seguros:
https, olocalhostdurante el desarrollo.
