如何根据字符串键(序列键)验证登录用户以在 asp.net mvc 中执行某些特定操作?

How to validate a logged in user against string key (serial key) to carry out some specific actions in asp.net mvc?

我是 asp.net mvc 的完全初学者,坦率地说也是编码。我正在创建我的第一个 MVC 应用程序。我设置了 asp.net 身份系统,它工作正常。我的控制器中有一些操作方法,我希望登录用户提供一个序列号(14 个字母数字字母)以便获得执行某些任务的授权。我已经阅读了大量关于自定义的文章 AuthorizeAttribute,但我没有提出解决方案,而是让它变得更加困难。

这些序列密钥应该保存在应用程序的某个地方,也许在后端数据库中。想要访问特定操作方法的用户应提供序列号。 整个场景就像许可软件或防病毒软件。任何现实的例子或具体的教程都会有很大帮助。

谢谢

您可以将序列号保存为会话变量。然而,这将意味着每次会话超时时,用户都必须为每个操作提供序列号。创建一个单独的数据库 table 来保存用户 ID 的序列密钥,以便根据经过验证的用户进行检查可能是更好的选择。

正如 OP 所要求的那样,我将扩展主题。当我们谈到网络安全时,首先想到的是哈希。 什么是散列?散列是数据编码的一种方式。例如你有一个密码,你会如何保护它?您对其进行哈希处理并将其存储在数据库中。当用户第二次尝试登录时,您会将他的密码散列并存储在数据库中。现在他输入密码,你对其进行哈希处理并查看它在数据库中是否匹配。

对于您的具体情况:

  • 您可能想要访问包含散列序列键值的存储。
  • 当用户输入一些序列密钥时,您使用相同的方法对其进行哈希处理(与用于哈希序列密钥的方法相同)。
  • 在您的存储中查找与用户提供的值相匹配的值。如果匹配,则用户已插入正确的序列号。

用盐散列的例子:

static byte[] GenerateSaltedHash(byte[] plainText, byte[] salt)
{
  HashAlgorithm algorithm = new SHA256Managed();

  byte[] plainTextWithSaltBytes = 
  new byte[plainText.Length + salt.Length];

  for (int i = 0; i < plainText.Length; i++)
  {
   plainTextWithSaltBytes[i] = plainText[i];
  }
  for (int i = 0; i < salt.Length; i++)
  {
  plainTextWithSaltBytes[plainText.Length + i] = salt[i];
  }

  return algorithm.ComputeHash(plainTextWithSaltBytes);            
}

用于散列来自 MSDN, SO 的数据。 关于 hashing.

的文章

.NET hashing class for multiple times.

不幸的是,软件安全有很多问题。当涉及到 Web 应用程序时,您必须先进行研究才能确保安全。