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

标签 c# asp.net-mvc authorization identity

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

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

谢谢

最佳答案

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

针对您的特定情况:

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

用盐散列的例子:

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 应用程序时,您必须先进行研究,然后才能确保安全。

关于c# - 如何根据字符串键(序列键)验证登录用户以在 asp.net mvc 中执行某些特定操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36848164/

相关文章:

c# - 在 MVC 中使用 DropDownList 中的选定项

c# - 当我部署(iis7、asp.net mvc4)时,如何让我的 Visual Studio 解决方案中的文件夹出现在我的服务器上?

asp.net-mvc-3 - 具有角色的 AuthorizeAttribute 但不对角色值进行硬编码

php - AWS S3 查询字符串授权

c# - 在RowFilter中,如何在C#中选择所有表列?

c# - 如何知道异步函数何时完成 C#

C# NAudio 获取音频文件持续时间/性能

c# - asp.net gridview onrowcommand -->( GridViewCommandEventArgs)

c# - .NET 4函数: Function argument question

asp.net-mvc - Web API 和 AngularJS SPA 应用程序的身份验证