Im CS major y acabo de terminar de diseñar un sitio ASP.net, y para el sitio necesitaba un sistema de autenticación de inicio de sesión ... No quería utilizar SQLMembershipProvider porque realmente quería aprender cómo hacer uno solo ... De todos modos, esto es lo que se me ocurrió, y me preguntaba si alguien me puede dar algunos comentarios, sugerencias o consejos.Autenticación ASP.net
Gracias de antemano
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Security.Cryptography;
/// <summary>
/// Summary description for PwEncrypt
/// </summary>
public class PwEncrypt
{
public const int DefaultSaltSize = 5;
private static string CreateSalt()
{
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] buffer = new byte[DefaultSaltSize];
rng.GetBytes(buffer);
return Convert.ToBase64String(buffer);
}
public static string CreateHash(string password, out string salt)
{
salt = CreateSalt();
string saltAndPassword = String.Concat(password, salt);
string hashedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(saltAndPassword, "SHA1");
hashedPassword = string.Concat(hashedPassword, salt);
return hashedPassword;
}
public static string CreateHashAndGetSalt(string password, string salt)
{
string saltAndPassword = String.Concat(password, salt);
string hashedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(saltAndPassword, "SHA1");
hashedPassword = string.Concat(hashedPassword, salt);
return hashedPassword;
}
public static bool comparePassword(string insertedPassword, string incUserName, out string newEncryptedPassword, out string originalPassword)
{
databaseInteraction DBI = new databaseInteraction();
string actualPassword ="";
string salt = "";
DBI.getSaltandPassword(incUserName, out salt, out actualPassword);
string hashedIncPassword = PwEncrypt.CreateHashAndGetSalt(insertedPassword, salt);
// hashedIncPassword = string.Concat(hashedIncPassword, salt);
newEncryptedPassword = hashedIncPassword;
originalPassword = actualPassword;
if (newEncryptedPassword == originalPassword)
{
return true;
}
else { return false; }
}
Si desea crear un proveedor de membresía personalizado, primero debe heredar de MemberShipProvider. Y esto está bastante bien documentado si googleas un poco. –
No intente desplegar sus propios esquemas personalizados de autenticación y administración de sesión o cree sus propios controles a menos que realmente no tenga otra opción. Solo quiero hacerlo, no califica. Una lectura interesante: http://www.troyhunt.com/2010/07/owasp-top-10-for-net-developers-part-3.html –
@ChristopheGeers Exactamente ... Es bastante engorroso hacerlo tú mismo, los integrados en MembershipProviders funcionan bien, pero deben configurarse para hacerlo. – sinni800