带有哈希密码的Web API BasicHttpAuth

时间:2016-02-03 09:11:49

标签: asp.net encryption asp.net-web-api hash basic-authentication

所以我有一个网络Api,用户名和密码验证用户。与API通信的客户将安装有内置应用程序的Android手机从api获取/发送一些数据。

我用数据库在数据库中散列了密码。客户端和API之间的连接将是SSL。

现在在网站(MVC)上,我通过生成一个新的哈希并将其与数据库中的哈希进行匹配来记录用户。

一些Android设备将有一个配置文件,可以将应用程序锁定到特定用户。现在我宁愿不在设备上以明文形式存储密码,并希望加密密码。

现在的问题是比较散列密码的最佳做法。我不认为它只是将简单密码发送到API或是吗?

2 个答案:

答案 0 :(得分:1)

这是安全的,因为您使用的是SSL。

纯文本请求不接受基本身份验证,但由于HTTPS会加密所有内容,因此不应该是一个问题。

存储密码是一个完全独立的问题,正如您所指出的那样,并且应该加密,这听起来就像Android会为您做的那样。唯一的考虑因素是您必须进行可逆加密才能将密码本身发送到您的API。

基本上:

  1. (客户端)用户输入信用
  2. (客户端)加密信用卡,存储在配置中
  3. (客户端)从配置读取,解密信用
  4. (客户端)使用解密的信用卡
  5. 向具有基本身份验证类型的API发送HTTPS请求
  6. (服务器端)哈希(单向加密,基本上)密码,与数据库进行比较
  7. 这听起来就像你所拥有的那样,我认为没有任何问题。

    所有人都说,只是为了它的价值,我会因为这个特殊的用例而被implement an OAuth 2.0 server所诱惑,所以你根本不必考虑保留密码。这是一项相当大的工作(有点 - 这些指令并不需要太长时间),您应该根据具体情况对其进行评估。但是,每当我不得不担心API身份验证时,我通常会结束这种情况,或者希望我拥有它。

答案 1 :(得分:1)

我会考虑使用JWT(JSON Web Token,http://jwt.io)之类的东西。您可以让客户端对您的API进行身份验证,如果他们提供了正确的凭据,您可以向他们发出令牌,这些令牌可以保留在本地存储上。然后,他们会在需要身份验证的任何API请求的标头中提供此令牌。您可以使用OWIN中间件来拦截请求,检查/验证令牌,并在您认为令牌有效时将请求传递给您的控制器。