2017-03-28 101 views
0

我有一个MVC网站使用身份验证的asp.net身份2.0。 我也在为Android手机应用程序开发相同数据库的REST API。 我想使用身份2.0哈希密码在REST API中进行身份验证,但不能从Android应用发送明文密码。 Android应用程序必须以与身份2.0用户管理器相同的方式对密码进行哈希处理,然后我可以比较从Android应用程序发送的密码和存在于AspNetUsers表中的密码。 问题是,我找不到任何实现或准则来实现Java/Android中Identity 2.0的PasswordHasher。ASP.Net身份2.0和Android的其余API

这里是身份2.0 PasswordHasher的C#代码https://raw.githubusercontent.com/aspnet/Identity/5480aa182bad3fb3b729a0169d0462873331e306/src/Microsoft.AspNetCore.Identity/PasswordHasher.cs

请帮助,因为过去两天我坚持..在客户端上

回答

1

哈希密码是一个坏主意。它如何使它变得更好,然后以纯文本形式发送密码?如果MiTM攻击者获取散列密码 - 他将获得登录到系统的所有内容。是的,您并未传输原始密码,但是您传输的散列实际上已成为密码,并且无论如何您都将密码的纯文本散列存储在数据库中。

另外盐呢?在标识框架中,盐与散列存储在相同的字段中 - 它们被相互附加到一起。如果您在同一个字符串上运行PasswordHasher.HashPassword() 10次,则会得到10个不同的结果,因为此结果已包含salt。如果您尝试在客户端上运行此操作,则每次都会得到不同的字符串,您将无法与已存储在数据库中的哈希/盐进行比较。所以你必须从服务器以某种方式传递salt以便能够使用相同的salt进行散列。这使得它过于复杂并且容易被错误地完成。

不要试图自己创造安全系统。通过加密连接以纯文本形式传递用户名/密码,并让框架为您做散列/持久化。

+0

将密码散列在客户端上的好处在于,您不一定要让系统更安全,但是您为客户端提供了额外的安全层。在发生MiTM攻击时,攻击者将不会在用户使用相同密码的其他应用程序中使用明文密码。 – keelerjr12