如何启用用户从唯一一台计算机(通过获取CPU Serial)登录到ASP.NET-MVC Web应用程序

Yod*_*oda 5 .net security asp.net-mvc authorization

场景:

我有Web部署的ASP.NET-MVC 5应用程序与个人用户帐户:Identity 2.x. 每个用户都有一个电子邮件和密码通过浏览器登录Web应用程序,这意味着用户可以通过任何设备使用Internet浏览器进行登录.

我想在每次登录时使用完全相同的PC类机器的情况下启用用户登录.

我可以礼貌地要求用户在必要时运行任何桌面.NET(.exe)应用程序.我还可以要求用户使用Chrome浏览器,如果插件是必要的话.直译我可以承担任何事情.解决方案可能会非常不舒服,这很好.

我的半解决方案:

  1. 通过桌面获取CPU序列号(让我们称之为Authorizer.exe)应用程序,该应用程序将此唯一ID发送到ASP.NET-MVC Web应用程序,同时登录它以授权该用户使用某台PC.Authorizer.exe会通过嗅探通过网络传输的数据包来检测登录到Web应用程序.PLUS检测用户的位置,这会限制他移动计算机.

  2. 创建桌面应用程序,只能使用Web应用程序提供的唯一序列激活一次.只有打开这个桌面应用程序才能登录到ASP.NET-MVC.(我不知道该怎么做).

为什么我问这个问题:

如果有人窃取用户的电子邮件和密码,我不想让小偷能够登录,但对我来说最重要的是我不希望让用户从不同的设备登录.

Jot*_*aBe 4

我能想到的唯一解决方案是颁发客户端证书,并在您的应用程序中使用证书身份验证。

管理证书

要管理证书,您需要实施 PKI,这需要:

  • 获取颁发证书所需的证书颁发机构(可以是公共 CA,也可以使用自签名证书)
  • 使用 CA 为您的 Web 服务器颁发证书
  • 将您的应用程序配置为通过 HTTPS 运行,并需要证书身份验证
  • 为您的用户颁发证书并将其安装在他们的浏览器中

确保用户无法将证书移动到其他计算机

薄弱环节是最后一个。您必须注意如何安装以及如何颁发证书。

在用户浏览器上安装证书

在浏览器中安装证书。你可以:

  • 创建证书文件,用于在浏览器中导入证书
  • 使用 PKI 基础设施(证书服务器),允许通过使用浏览器访问页面来请求证书,并且在证书颁发后(即其请求被接受),需要使用相同的浏览器在其中安装证书。

注意:在这两种情况下,您都必须接受请求并颁发证书或拒绝它。证书不会自动颁发

第一个选项有一个问题:如果您将证书发送给您的用户,他将能够在任何计算机上安装它任意次数。要解决此问题,您需要访问用户的计算机,复制文件,安装它,然后删除它。第二种选择解决了这个问题。

第二种选择更安全。但有足够知识的用户仍然可以在此过程中恢复服务器颁发的文件,并将证书安装在不同的位置。

使私钥不可导出

另一个需要考虑的非常重要的一点是,当您颁发证书时,通常有一个选项允许其私钥可导出。如果设置此选项,用户可以从安装它的浏览器中导出 PK,并将其安装在其他地方。显然你想避免这种情况。因此,禁用此选项。

使用此选项,用户仍然可以导出证书,但没有其私钥,因此无法将其安装在其他地方。

设置 PKI

我没有提供有关如何设置 PKI 的更多详细信息,因为它很大程度上取决于基础设施(操作系统和版本)。如果您想了解有关证书和 PKI 的更多信息,请参阅维基百科条目“X.509”维基百科条目 PKI。然后,您可以查找有关在特定基础设施 (OS) 中设置 PKI 的其他信息。

本系统的安全性

您可以放心,这个系统确实安全:例如,在我的国家,您可以通过这种方式识别自己的身份,以进行很多“官方”的事情,例如申报和纳税。

吊销证书

而且,如果您想知道如果您想拒绝已拥有证书的用户的访问会发生什么。答案是,您可以随时撤销证书,这样服务器就不会允许您的用户使用其证书进行身份验证,因为它已被撤销。

用户和机器安全

另一件让您担心的事情是其他用户使用同一台机器并登录到您的应用程序。由于以下原因,它比看起来更难:

  • 仅当您使用安装该证书的同一用户登录计算机时,该证书才可用
  • 安装证书时,您可以让操作系统在有人想要使用该证书时请求密码
  • 您可以使您的应用程序具有双重授权:
    • 首先,证书授权(这实际上是由IIS本身处理的)
    • 其次,请求用户名和密码(或使用证书的用户名,并请求与用户关联的附加密码)

编辑:肮脏的解决方案,以及所有解决方案中的女王evercookie,它将数据存储在 12 个不同的可想象和不可想象的地方

我见过很多答案,建议使用一种“神奇的方式”来识别用户的机器,而用户不知道并接受它,或者可能会被某些用户操作破坏。这些解决方案不稳定,甚至可能不合法。此外,所解释的解决方案都不是可靠的或易于实施的,但我将在我的回答结束时向您提供解决方案。但在此之前,请允许我解释一下为什么我更喜欢证书解决方案。

安装已颁发的证书不会对用户隐藏,并且除非用户故意删除证书,否则无法破坏该证书。用户可以被告知他需要证书才能访问应用程序,因此您既不会作弊,也不会“变魔术”来识别他的机器。这是一个干净、受支持且有文档记录的解决方案。此外,证书不能被破解或黑客攻击(严格意义上来说,一切都可以被破解或黑客攻击,但这太难破解了)。除此之外,同一个证书可以由所有浏览器共享,因为它不是安装在浏览器中,而是安装在计算机的证书存储中。因此,即使用户使用不同的浏览器打开应用程序,证书仍然存在。并且很容易检查身份验证问题是否是缺少证书(或与之相关的东西)。

但是,如果您仍然希望实现一种无需用户批准即可识别用户计算机的解决方案,或者无需解释其工作原理,则可以使用“supercookies”。如果你用谷歌搜索 thister,你会发现很多地方都利用了闪存。甚至Flash + HTML5 存储。或者它甚至可以使用许多其他位置来存储所需的信息。但你会发现这种技术并不受欢迎。并且可以对抗低点并让你陷入困境。不过,话虽如此,如果你仍然想做这种“肮脏”的事情,你可以使用evercookie。它是用 JavaScript 实现的,您可以从此链接查看信息并下载代码:

免责声明:如果你使用这个邪恶的东西并陷入某种麻烦,请不要怪罪我!我告诉你了!