Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En esta guía se explica cómo implementar la compatibilidad con claves de paso para un nuevo o existente Blazor Web App con ASP.NET Core .Identity
Para obtener información general sobre las claves de acceso y las instrucciones generales de configuración, consulte Habilitación de las claves de acceso de la API de autenticación web (WebAuthn).
Prerrequisitos
SDK de .NET (.NET 10 o posterior)
Creación de Blazor Web App
Use las instrucciones siguientes para crear un nuevo Blazor Web App con ASP.NET Core Identity, que incluye compatibilidad con claves de acceso.
Nota:
Se requiere Visual Studio 2022 o posterior y el SDK de .NET 10 o posterior.
En Visual Studio:
- Seleccione Crear un nuevo proyecto en la ventana de inicio o seleccione Archivo>Nuevo>Proyecto en la barra de menús.
- En el cuadro de diálogo Crear un nuevo proyecto, selecciona Blazor Web App en la lista de plantillas de proyectos. Haz clic en el botón Siguiente.
- En el cuadro de diálogo Configurar el nuevo proyecto, asigne al proyecto el nombre
BlazorWebAppPasskeysen el campo Nombre del proyecto, incluidas las mayúsculas. El uso de este nombre exacto del proyecto es importante para asegurarse de que los espacios de nombres coinciden con el código que copia del artículo en la aplicación que está compilando. - Confirme que la Ubicación de la aplicación es adecuada. Deje activa la casilla Colocar la solución y el proyecto en el mismo directorio. Haz clic en el botón Siguiente.
- En el cuadro de diálogo Información adicional , establezca el tipo de autenticación en Cuentas individuales. Use la siguiente configuración para las otras opciones:
- Framework: versión más reciente del marco (.NET 10 o posterior)
- Configuración para HTTPS: seleccionado
- Modo de representación interactiva: Servidor
- Ubicación de interactividad: Global
- Incluir páginas de ejemplo: seleccionado
- No usar instrucciones de nivel superior: no seleccionado
- Use el TLD .dev.localhost en la dirección URL de la aplicación: No seleccionado
- Selecciona Crear.
Las instrucciones anteriores crean con Blazor Web App :
- ASP.NET Core Identity configurado para la autenticación de usuario mediante la
-au|--authenticationopción . - Entity Framework Core con SQLite para el almacenamiento de datos.
- Registro de clave de paso y puntos de conexión de autenticación.
- Componentes de la interfaz de usuario para administrar claves de acceso.
Nota:
Actualmente, solo la plantilla de Blazor Web App proyecto incluye compatibilidad integrada con claves de acceso.
Ejecutar la aplicación
Presione F5 para ejecutar la aplicación con depuración o Ctrl+F5 para ejecutar la aplicación sin depurar.
La siguiente guía se basa en una aplicación que se creó con cuentas individuales para el tipo de autenticación o scaffolding Identity de la aplicación en una aplicación existente.
Prerrequisitos
- Blazor Web App Existente (.NET 10 o posterior) con ASP.NET CoreIdentity
- SDK de .NET (.NET 10 o posterior)
Para obtener instrucciones sobre la migración, consulte Migración de una aplicación ASP.NET Core.
Guía de origen de referencia
Los vínculos de este artículo al origen de referencia de .NET cargan la rama predeterminada del repositorio, que representa el desarrollo actual para la próxima versión de .NET. Para seleccionar una etiqueta para una versión específica, use la lista desplegable Cambiar ramas o etiquetas . Para obtener más información, consulta Procedimientos para seleccionar una etiqueta de versión de código fuente de ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Actualización de Identity la versión del esquema
En Program.cs, actualice la configuración para usar la Identity versión 3 del esquema, que incluye compatibilidad con claves de acceso:
builder.Services.AddIdentityCore<ApplicationUser>(options =>
{
options.SignIn.RequireConfirmedAccount = true;
options.Stores.SchemaVersion = IdentitySchemaVersions.Version3;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddSignInManager()
.AddDefaultTokenProviders();
Creación y ejecución de una migración de base de datos
En el Explorador de soluciones de Visual Studio, haga doble clic en Servicios conectados. En el área Dependencias del servicio , seleccione los puntos suspensivos (...) seguidos de Agregar migración en el área LOCALDB de SQL Server Express .
Asigne al migración un nombre de migración de AddPasskeySupport para describir la migración. Espere a que el contexto de la base de datos se cargue en el campo Nombres de clase DbContext . Seleccione Finalizar para crear la migración. Seleccione el botón Cerrar cuando se complete la operación.
Vuelva a seleccionar los puntos suspensivos (...) seguidos del comando Actualizar base de datos .
Se abre el cuadro de diálogo Actualizar base de datos con la migración más reciente . Espere a que el campo Nombres de clase DbContext se actualice y para que las migraciones anteriores se carguen. Seleccione el botón Finalizar . Seleccione el botón Cerrar cuando se complete la operación.
Creación de clases de modelo passkey
Agregue las siguientes clases de modelo al proyecto en la Components/Account carpeta y actualice el BlazorWebCSharp._1.Components.Account espacio de nombres para que coincida con la aplicación (por ejemplo: Contoso.Components.Account):
-
Components/Account/PasskeyInputModel.cs: contiene la credencial de clave de acceso JSON para las operaciones de inicio de sesión de clave de paso (Logincomponente) y la adición de claves de acceso (Passkeyscomponente). -
Components/Account/PasskeyOperation.cs: define la acción de autenticación que se va a realizar (PassKeySubmitcomponente), ya sea registrando una nueva clave de acceso (Create/0) o autenticando con una clave de acceso existente (Request/1).
Creación del PasskeySubmit componente
Agregue el siguiente PasskeySubmit componente para controlar las operaciones de clave de paso:
Components/Account/Shared/PasskeySubmit.razor
Adición de JavaScript para operaciones de clave de paso
Agregue el siguiente archivo JavaScript para controlar las interacciones de la API de WebAuthn:
Components/Account/Shared/PasskeySubmit.razor.js
Adición de puntos de conexión de clave de acceso
Actualice el IdentityComponentsEndpointRouteBuilderExtensions.cs archivo (o cree el archivo si no existe y llama MapAdditionalIdentityEndpoints al Program archivo) para incluir los puntos de conexión específicos de la clave de acceso:
/PasskeyCreationOptionspuntos de conexión y /PasskeyRequestOptions
Actualizar la página Inicio de sesión
Reemplace el componente existente Login por el siguiente componente y actualice el BlazorWebCSharp._1.Data espacio de nombres para que coincida con la aplicación (por ejemplo: Contoso.Components.Account.Data):
Components/Account/Pages/Login.razor
Adición de un método de redireccionamiento a la IdentityRedirectManager clase
Agregue el método siguiente a la IdentityRedirectManager clase en Components/Account/IdentityRedirectManager.cs:
public void RedirectToInvalidUser(
UserManager<ApplicationUser> userManager, HttpContext context) =>
RedirectToWithStatus("Account/InvalidUser",
$"Error: Unable to load user with ID '{userManager.GetUserId(context.User)}'.",
context);
Creación de páginas de administración de claves de paso para agregar y cambiar el nombre de las claves de acceso
Agregue el siguiente Passkeys componente para administrar las claves de acceso y actualice el BlazorWebCSharp._1.Data espacio de nombres para que coincida con la aplicación (por ejemplo: Contoso.Components.Account.Data):
Components/Account/Pages/Manage/Passkeys.razor
Agregue el siguiente RenamePasskey componente para cambiar el nombre de las claves de acceso y actualizar el BlazorWebCSharp._1.Data espacio de nombres para que coincida con la aplicación (por ejemplo: Contoso.Components.Account.Data):
Components/Account/Pages/Manage/RenamePasskey.razor
Actualizar el menú de navegación administrar
Agregue un vínculo a la página de administración de claves de acceso en el componente de ManageNavMenu la aplicación.
En Components/Account/Shared/ManageNavMenu.razor, agregue el siguiente NavLink componente para el Passkeys componente:
<li class="nav-item">
<NavLink class="nav-link" href="Account/Manage/Passkeys">Passkeys</NavLink>
</li>
Incluir el archivo JavaScript
En el App componente (Components/App.razor), localice la etiqueta Blazor de script:
<script src="_framework/blazor.web.js"></script>
Inmediatamente después de la etiqueta de Blazor script, agregue una referencia al PasskeySubmit módulo de JavaScript:
<script src="Components/Account/Shared/PasskeySubmit.razor.js" type="module"></script>
Registro de una clave de acceso
Para probar la funcionalidad passkey:
- Registre una cuenta nueva o inicie sesión con una cuenta existente.
- Vaya a Administrar su cuenta (seleccione el nombre de usuario en el menú de navegación).
- Seleccione Passkeys en el menú de navegación.
- Seleccione Agregar una nueva clave de acceso.
- Siga las indicaciones del explorador para crear una clave de acceso mediante el autenticador del dispositivo.
Inicio de sesión con claves de paso
Después de registrar una clave de acceso:
- Cierre la sesión de la aplicación.
- En la página de inicio de sesión, escriba su dirección de correo electrónico.
- Seleccione Iniciar sesión con una clave de acceso.
- Siga las indicaciones del explorador para autenticarse con la clave de acceso.
- Vaya a para
Account/Manage/Passkeysagregar, cambiar el nombre o eliminar claves de paso. - Si la clave de paso admite autorrellenar la clave de paso (interfaz de usuario condicional) para el inicio de sesión, pruebe la característica autorrellenar la clave de acceso seleccionando el campo de entrada de correo electrónico cuando haya guardado las claves de acceso.
Mitigación del PublicKeyCredential.toJSON error (TypeError: Illegal invocation)
Algunos administradores de contraseñas no implementan el PublicKeyCredential.toJSON método correctamente, que es necesario para JSON.stringify que funcione al serializar las credenciales de clave de acceso. Al registrar o autenticar a un usuario con una aplicación basada en la Blazor Web App plantilla de proyecto, se produce el siguiente error al intentar agregar una clave de acceso:
Error: Could not add a passkey: Illegal invocation
Para obtener instrucciones sobre cómo mitigar este error, consulte Habilitación de las claves de acceso de la API de autenticación web (WebAuthn).