tag sintaxis route parameter net mvc for data asp all asp.net asp.net-mvc-4 membership-provider simplemembership

sintaxis - asp.net razor



use la sal cuando use SimpleMembershipProvider (2)

Posible duplicado:
WebMatrix WebSecurity PasswordSalt

¿Hay alguna manera de que simpleMembershipProvider use la sal?

cuando creo mi proyecto web mvc4 y configuro la conexión predeterminada a sqlexpress, luego me registro, mis usuarios no tienen una contraseña salt

Me gustaría que fuera lo más seguro posible sin demasiados problemas.


Cita de la documentation :

Por diseño, la clase SimpleMembershipProvider no implementa la gama completa de funciones que es posible en los proveedores de membresía de ASP.NET, como se define en la clase MembershipProvider que utilizan todos los proveedores de membresía de ASP.NET. Algunos miembros están disponibles en la clase porque se heredan de la clase base, pero lanzarán una excepción si accede a ellos.

Si su sitio web requiere todas las capacidades del proveedor de membresía, puede omitir la inicialización del sistema de membresía de páginas web (es decir, no llamar a WebSecurity.InitializeDatabaseConnection ()) y en su lugar, asegurarse de que la membresía estándar y los proveedores de roles estén habilitados. En ese caso, las llamadas que realice a la clase SimpleMembershipProvider se pasan al proveedor estándar (al que se hace referencia como el proveedor anterior en la documentación de la clase SimpleMembershipProvider). Para obtener más información, consulte Configuración de una aplicación ASP.NET para usar la membresía.

El campo PasswordSalt es una de esas columnas. Si observa el código fuente de SimpleMembershipProvider, notará que la columna PasswordSalt simplemente se establece en string.Empty . string.Empty :

if (database.Execute("INSERT INTO [" + MembershipTableName + "] (UserId, [Password], PasswordSalt, IsConfirmed, ConfirmationToken, CreateDate, PasswordChangedDate, PasswordFailuresSinceLastSuccess) VALUES (@0, @1, @2, @3, @4, @5, @5, @6)", new object[] { num, str, string.Empty, !requireConfirmationToken, obj3, DateTime.UtcNow, num2 }) != 1) { throw new MembershipCreateUserException(MembershipCreateStatus.ProviderError); }

Por lo tanto, si desea usarlo, puede escribir un proveedor de membresía personalizado que anule el predeterminado y genere el PasswordSalt usted mismo. Podría anular el método CreateAccount .


La columna PasswordSalt no está en uso, pero se usa sal al crear la contraseña con hash que está almacenada en el campo Contraseña. Puede ver esto si observa el código fuente de SimpleMembershipProvider: http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/3a669e7112e7#src%2fWebMatrix.WebData%2fSimpleMembershipProvider.cs

Compruebe el método CreateUserAndAccount. Utiliza el método Crypto.HashPassword :

/* ======================= * HASHED PASSWORD FORMATS * ======================= * * Version 0: * PBKDF2 with HMAC-SHA1, 128-bit salt, 256-bit subkey, 1000 iterations. * (See also: SDL crypto guidelines v5.1, Part III) * Format: { 0x00, salt, subkey } */ public static string HashPassword(string password) { if (password == null) { throw new ArgumentNullException("password"); } // Produce a version 0 (see comment above) password hash. byte[] salt; byte[] subkey; using (var deriveBytes = new Rfc2898DeriveBytes(password, SaltSize, PBKDF2IterCount)) { salt = deriveBytes.Salt; subkey = deriveBytes.GetBytes(PBKDF2SubkeyLength); } byte[] outputBytes = new byte[1 + SaltSize + PBKDF2SubkeyLength]; Buffer.BlockCopy(salt, 0, outputBytes, 1, SaltSize); Buffer.BlockCopy(subkey, 0, outputBytes, 1 + SaltSize, PBKDF2SubkeyLength); return Convert.ToBase64String(outputBytes); }

Básicamente, para responder a sus inquietudes, es tan seguro como debe ser, sin que tenga que enfrentar ningún problema adicional.