|
|
Publicado en 15/8/2023 10:21:16
|
|
|
|

Requisitos: Durante el proceso de desarrollo, a menudo puede encontrarse con algunos escenarios de cifrado y descifrado, por ejemplo, la autenticación de correo electrónico puede llevar una cadena cifrada, y cuando el usuario hace clic en el enlace para saltar a la interfaz, el sistema puede descifrar el contenido de la cadena de forma normal, realizando así la función de autenticación por correo electrónico.
ASP.NET Core ofrece funciones de protección de datos:El inicio de sesión del hipervínculo es visible.
Paquete principal
Los principales paquetes implicados en la Protección de Datos son los siguientes, que se referencian según sea necesario:
- Microsoft.AspNetCore.DataProtection.Abstractions estándar. Nombre de paquetes de componentes de la capa de abstracción NET Core. Incluye servicios de interfaz importantes como IDataProtectionProvider e IDataProtector.
- Microsoft.AspNetCore.DataProtection, incluyendo operaciones criptográficas principales, gestión de claves, configuración y extensibilidad.
- Extensión Microsoft.AspNetCore.DataProtection.Extensions. Proporciona un método de fábrica para crear instancias y un método de extensión de almacenamiento para claves. Este paquete se utiliza en modo no DI.
- Microsoft.AspNetCore.DataProtection.SystemWeb <machineKey>implementa compatibilidad con los mecanismos de cifrado y descifrado en ASP.NET 4.x.
- Microsoft.AspNetCore.Cryptography.KeyDerivation proporciona una implementación de la rutina de hash de contraseñas PBKDF2. Úsalo cuando necesites cifrado hash.
IDataProtectionProvider vs IDataProtector
IDataProtectionProvider se basa en el modelo Provider de Microsoft y se utiliza para proporcionar políticas para la creación de instancias. Crea un objeto IDataProtector llamando al método IDataProtectionProvider.CreateProtector(purpose). IDataProtector es un servicio responsable del cifrado y el descifrado, que principalmente proporciona dos tipos de métodos: protect y unprotect (cada tipo tiene muchos métodos de sobrecarga y extensión). Una comprensión sencilla es que protect se usa para cifrado y unprotect para descifrado. El parámetro Create method de IDataProtectionProvider es una cadena que proporciona funcionalidad de aislamiento. Los IDataProtectors creados con cadenas no pasables obtendrán resultados de cifrado diferentes incluso si cifran el mismo objeto. IDataProtector en sí es también un IDataProtectionProvider implícito, que también proporciona el método CreateProtector(purpose). Esto significa que puede implementarse fácilmenteModo de aplicación multi-inquilino。
Aquí tienes algunas cosas a tener en cuenta:
Instancias de IDataProtectionProvider e IDataProtectorSeguridad de roscaBlanco. El método unprotect es informar al llamante de que la descifración falló lanzando una excepción. La clase de excepción es CryptographicException.
ASP.NET Core es una protección de datos sencilla de usar
Se añade una nueva interfaz para cifrar y descifrar datos, y el código es el siguiente:
La prueba es la siguiente:
IDataProtectionProvider es un patrón singleton con el siguiente código:El inicio de sesión del hipervínculo es visible.
Gestión clave
Si el perfil de usuario está disponible, la clave se conserva para%LOCALAPPDATA%\ASP.NET\DataProtection-Keyscarpeta. Si el sistema operativo es Windows, la clave se cifra en reposo usando DPAPI. Como se muestra a continuación:
Vida clave
Por defecto, la claveEl ciclo de vida es de 90 días。 Cuando la clave expira, la aplicación genera automáticamente una nueva clave y establece la nueva clave como la clave activa. Mientras las claves desactivadas permanezcan en el sistema, tu aplicación puede descifrar cualquier dato protegido por ellas. Para más información, véase Gestión de llaves.El inicio de sesión del hipervínculo es visible.
Algoritmo por defecto
Los algoritmos de protección de carga por defecto utilizados son AES-256-CBC (por confidencialidad) y HMACSHA256 (por autenticidad). La clave maestra de 512 bits, que cambia cada 90 días, se utiliza para derivar dos subclaves para estos algoritmos basadas en cada carga útil.
ASP.NET proveedor de almacenamiento clave en Core
Sistema de archivos: PersistKeysToFileSystem Azure Storage: PersistKeysToAzureBlobStorage, which requires reference: Azure.Extensions.AspNetCore.DataProtection.Blobs Almacenamiento Redis: PersistKeysToStackExchangeRedis, referencia requerida: Microsoft.AspNetCore.DataProtection.StackExchangeRedis
Referencia:El inicio de sesión del hipervínculo es visible.
Clústeres y distribución
Si la clave del servidor es inconsistente, por ejemplo: cifrado del servidor A y descifrado del servidor B, se lanzará una excepción (como se muestra en la figura siguiente) y debe desplegarse la misma clave.
Configura la misma clave de la siguiente manera:
Una vez que el programa está en ejecución, genera automáticamente un archivo de clave *.xml bajo la carpeta publish_itsvse¡, mantén este archivo consistente en diferentes servidores! Como se muestra a continuación:
ASP.NET Configuración de protección del núcleo
ASP.NET CORE ofrece soporte enriquecido para API, persistencia de contraseñas, configuración y funciones de personalización.
- PersistKeysToAzureBlobStorage、ProtectKeysWithAzureKeyVault。 Escenario de almacenamiento en la nube de Azure.
- PersistKeysToFileSystem。 Esquema de almacenamiento del sistema de archivos local que registra algoritmos de cifrado, claves y dependencias.
- ProtectKeysWith*。 El cifrado se proporciona mediante extensiones de este método de nombres. Por ejemplo, ProtectKeysWithCertificate
- SetDefaultKeyLifetime。 Establece la vida útil de la clave en 90 días por defecto.
- SetApplicationName。 Pon el nombre de la app. Por defecto, los mecanismos de protección de datos están absolutamente aislados de cada aplicación. El intercambio de claves entre aplicaciones se puede lograr estableciendo el mismo nombre de aplicación.
- DisableAutomaticKeyGeneration。 Evita que la clave se revierta automáticamente. Muchas veces no queremos que cambien las contraseñas o en un servicio de clúster tenemos un servicio dedicado responsable de la reversión de actualizaciones de claves, y otras cargas útiles solo necesitan obtenerlo desde un lugar compartido.
- UseCryptographicAlgorithms。 Utiliza algoritmos personalizados de cifrado y descifrado
Referencia:El inicio de sesión del hipervínculo es visible.
|
Anterior:Usa PowerShell para generar el elemento <machineKey>Próximo:Compara Tailscale, ZeroTier, WireGuard, OmniEdge y Ngrok para soluciones de geo-red
|