基于令牌的身份验证和哈希密码

Posted

技术标签:

【中文标题】基于令牌的身份验证和哈希密码【英文标题】:Token based authentication and hash passwords 【发布时间】:2016-04-19 10:10:51 【问题描述】:

在我的 asp.net 网络服务中,用户密码已使用

存储为哈希值
 BCrypt.Net.BCrypt.HashPassword (password, BCrypt.Net.BCrypt.GenerateSalt ());

而且我的 Web 服务也需要实现基于令牌的身份验证。我对此并不陌生,正如我从阅读身份验证令牌中了解到的那样,密码也以散列字符串的形式出现。所以我不知道如何验证身份验证令牌,因为我不知道任何一方的原始密码。真的需要在身份验证令牌中对密码进行哈希处理吗?或者我可以将密码作为 base 64 编码字符串附加到身份验证令牌吗?安全吗?

【问题讨论】:

【参考方案1】:

令牌通常是一个随机数/字符串,与密码等任何其他信息无关。

您可以实现一个身份验证服务,该服务需要一次密码,如果密码正确,则可以返回一个令牌。稍后客户端可以发送令牌而不是密码来验证用户。应用程序可以询问服务此令牌是否有效。

优点是:

应用程序可以将身份验证委托给服务。 以下请求无需公开用户名和密码。 不同的应用程序可以共享令牌,而无需知道用户名和密码。 该服务可以处理到期日期。 令牌比短用户密码强得多,因此可以更简单地处理。示例:令牌的哈希值可以很快,并且可以在不加盐的情况下存储,以便可以搜索它们。

【讨论】:

谢谢。这意味着我需要在服务器端存储客户端令牌? @Diluu - 只应存储令牌的哈希值,但是是的,身份验证服务必须将它们与用户 ID、到期日期、角色等一起存储在某个地方......不同的应用程序可以共享令牌并使用相同的服务进行身份验证。 谢谢@martinstoeckli 我会尝试这种方法。 @Diluu - 这个answer 对你也有帮助。它建议将令牌存储在数据库中,但它也显示了如何将信息安全地包含到令牌本身中。

以上是关于基于令牌的身份验证和哈希密码的主要内容,如果未能解决你的问题,请参考以下文章

Rest API 基于令牌的身份验证。基本认证

基于 Spring Security 令牌的身份验证

Openfire 服务器:使用令牌而不是用户名/密码进行身份验证

为基于Wildfly容器的身份验证生成salted /哈希密码

使用 Spring 和 JWT 进行基于令牌的身份验证

基本身份验证是基于令牌的身份验证吗?