2016-12-27 105 views
2

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

Environment.UserDomainName + "\" + Environment.UserName 

但是,这可能是众多用户相同。我不想包含机器名称,因为我想跟踪用户使用的任何机器。如何使用UserDomainName + "\" + Environment.UserName组合下的客户端应用程序为特定的Windows用户创建唯一密钥,而不管他们使用的是哪台计算机?

注:的关键应该根据用户的变化进行校对,以便改变其键,以防止用户被锁定将使其无效。没有本地数据库,因此此时密钥存储在用户主目录中的用户设置文件中。但是,无论文件存储在哪里,他们机器上的任何管理员都可以访问它,作为家庭用户,他们通常都是管理员。

回答

2

您可以使用GUID制度,是这样的:

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

的一个问题是,有一个非常小的机会,同样的GUID将被再生,防止这种情况,你可以储存所有的“使用'列表/字典中的GUID并重新生成一个。

+0

GUID是要走的路。这是它的目的。 – Kelly

+0

感谢Hisham,这是一个非常好的主意,但我忘记提及我希望能够检测用户是否更改了密钥,例如,尝试访问原始密钥导致它们被阻止时访问。连接到上面使用的结构的校验和是确保这一点的一种方式,但也许有一种更简单的方法,例如使用内置了这种校验和的已知算法对其进行哈希处理。我不需要实际的用户名信息为了识别用户,Identity稍后使用Jwt进行此操作。请参阅我的编辑到OP。 – ProfK

+1

如果我只是加密整个用户设置文件,那么你的方法就相当安全了。他们没有业务访问它,但通过“首选项”视图,当然不包括用户密钥。 – ProfK