为一个 Windows 用户生成唯一密钥

Generate a unique key for one Windows user

我有一个带有 ASP.NET Web API 服务器的 WPF 客户端。我想为使用客户端的任何特定 Windows 用户生成唯一密钥,以便 Web API 可以阻止该用户的多次登录尝试。我首先考虑只使用:

Environment.UserDomainName + "\" + Environment.UserName

但这对于许多用户来说可能是一样的。我不想包含机器名称,因为我想跟踪该用户使用的任何机器。我怎样才能为使用 UserDomainName + "\" + Environment.UserName 组合下的客户端应用程序的特定 Windows 用户创建唯一密钥,无论他们在哪台机器上使用它?

注意: 密钥应该被证明不会被用户更改,这样用户更改密钥以防止被锁定会使密钥无效。没有本地数据库,所以目前密钥存储在用户主目录下的用户设置文件中。然而,文件存储在哪里并不重要,他们计算机上的任何管理员都可以访问它,作为家庭用户,他们通常自己也是管理员。

您可以使用 GUID 系统,例如:

key = Guid.NewGuid() + "\" + Environment.UserDomainName + "\" + Environment.UserName;

一个问题是重新生成相同 GUID 的可能性非常小,为防止这种情况,您可以将所有 'used' GUID 存储在 list/dictionary 中并在任何重复时重新生成一个.