【问题标题】:Generate a unique key for one Windows user为一个 Windows 用户生成唯一密钥
【发布时间】:2016-12-27 04:59:39
【问题描述】:

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

Environment.UserDomainName + "\" + Environment.UserName

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

注意:应防止用户更改密钥,以便用户更改其密钥以防止被锁定会使其无效。没有本地数据库,因此目前密钥存储在用户主目录中的用户设置文件中。但是,文件存储在哪里并不重要,他们机器上的任何管理员都可以访问它,作为家庭用户,他们通常自己就是管理员。

【问题讨论】:

    标签: c# active-directory windows-authentication c#-6.0


    【解决方案1】:

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

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

    一个问题是,重新生成相同 GUID 的可能性非常小,为了防止这种情况,您可以将所有“使用过的”GUID 存储在列表/字典中,并在任何重复时重新生成一个。

    【讨论】:

    • GUID 是要走的路。这就是它的目的。
    • 谢谢你,Hisham,一个非常好的主意,但我忘了提到我希望能够检测用户是否更改了他们的密钥,例如当他们的原始密钥导致他们被阻止时尝试获得访问权限。连接到您上面使用的结构的校验和是确保这一点的一种方法,但也许有一种更简单的方法,例如使用内置此类校验和的已知算法对其进行散列。我不需要实际的用户名信息为了识别用户,Identity 稍后会使用 Jwt。请查看我对 OP 的编辑。
    • 如果我只是加密整个用户设置文件,你的方法会变得非常安全。他们没有业务访问它,但通过“首选项”视图,当然不包括用户密钥。
    猜你喜欢
    • 2016-05-20
    • 2010-09-08
    • 2023-04-04
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2012-04-09
    • 2017-02-28
    相关资源
    最近更新 更多