我将构建两个 Web 应用程序,一个在 MVC 中,另一个在 Web 窗体中。我对是否应该使用 ASP.NET 和 MVC 中可用的内置身份验证系统,或者是否应该创建自己的自定义身份验证系统感到困惑。就像创建我自己AccountController
的加密密码存储等。
我需要知道的是使用内置身份验证是否更有意义。如果不是,那么在为此创建自己Controller
的密码时,我需要考虑哪些事情,例如加密密码等?
我将构建两个 Web 应用程序,一个在 MVC 中,另一个在 Web 窗体中。我对是否应该使用 ASP.NET 和 MVC 中可用的内置身份验证系统,或者是否应该创建自己的自定义身份验证系统感到困惑。就像创建我自己AccountController
的加密密码存储等。
我需要知道的是使用内置身份验证是否更有意义。如果不是,那么在为此创建自己Controller
的密码时,我需要考虑哪些事情,例如加密密码等?
您可以在 MVC 和 WebForm 中使用ASP.NET Identity 2,但学习曲线陡峭。
您可以从 Adam Freeman 的免费书中阅读 ASP.NET 身份。
如果您认为 ASP.NET Identity 2 太多,您可以使用FormAuthentiation。
仅供参考:我强烈建议不要实现自己的加密算法。创建加密算法需要大量技能和测试。
private static string GenerateSalt()
{
byte[] numArray = new byte[16];
(new RNGCryptoServiceProvider()).GetBytes(numArray);
string base64String = Convert.ToBase64String(numArray);
return base64String;
}
private string EncodePassword(string pass, int passwordFormat, string salt)
{
byte[] numArray;
byte[] numArray1;
string base64String;
bool length = passwordFormat != 0;
if (length)
{
byte[] bytes = Encoding.Unicode.GetBytes(pass);
byte[] numArray2 = Convert.FromBase64String(salt);
byte[] numArray3 = null;
HashAlgorithm hashAlgorithm = HashAlgorithm.Create("SHA1");
if (hashAlgorithm as KeyedHashAlgorithm == null)
{
numArray1 = new byte[(int) numArray2.Length + (int) bytes.Length];
Buffer.BlockCopy(numArray2, 0, numArray1, 0, (int) numArray2.Length);
Buffer.BlockCopy(bytes, 0, numArray1, (int) numArray2.Length, (int) bytes.Length);
numArray3 = hashAlgorithm.ComputeHash(numArray1);
}
else
{
KeyedHashAlgorithm keyedHashAlgorithm = (KeyedHashAlgorithm) hashAlgorithm;
if (keyedHashAlgorithm.Key.Length != numArray2.Length)
{
if (keyedHashAlgorithm.Key.Length >= (int) numArray2.Length)
{
numArray = new byte[(int) keyedHashAlgorithm.Key.Length];
int num = 0;
while (true)
{
length = num < (int) numArray.Length;
if (!length)
{
break;
}
int num1 = Math.Min((int) numArray2.Length, (int) numArray.Length - num);
Buffer.BlockCopy(numArray2, 0, numArray, num, num1);
num = num + num1;
}
keyedHashAlgorithm.Key = numArray;
}
else
{
numArray = new byte[(int) keyedHashAlgorithm.Key.Length];
Buffer.BlockCopy(numArray2, 0, numArray, 0, (int) numArray.Length);
keyedHashAlgorithm.Key = numArray;
}
}
else
{
keyedHashAlgorithm.Key = numArray2;
}
numArray3 = keyedHashAlgorithm.ComputeHash(bytes);
}
base64String = Convert.ToBase64String(numArray3);
}
else
{
base64String = pass;
}
return base64String;
}
@Heemanshu Bhalla:由于这最终是一个设计问题,因此没有正确答案;这将取决于您的确切要求。不过,您应该问自己一些问题:
正如@Win 所说,我肯定会避免编写自己的身份验证或加密系统。也就是说,如果上述任何问题的答案是“是”,那么我会强烈考虑内置ASP.NET Identity 2。是的,正如@Win 所说,这是一个陡峭的学习曲线,但是:
如果您对开箱即用的基本功能感到满意,并且不介意项目中的大量预先搭建的代码,那么 Visual Studio 项目模板就不难掌握要点。也就是说,他们绝对需要耐心和承诺才能完全理解,特别是提供更深入的定制。