如何为我的应用保护在线API?

时间:2013-02-07 07:53:52

标签: security login passwords basic-authentication

我正在为Windows Phone和Android创建应用。所以现在我正在建立一个他们都可以使用的webapi,但是我想要保护它,而不是其他我的应用程序可以使用它。我该怎么办呢?没有其他人,那么我的应用程序将访问这些API。

我不想实施OAuth。

我有两个我想到的场景:

首先(我在客户端存储用户名和哈希密码):

  • basic-auth over https / ssl,就是这样。

第二次(我在客户端存储了accessstoken):

  • basic-auth over https / ssl以接收访问令牌。
  • 要获取访问令牌,用户会发送一个请求请求的令牌,该令牌验证客户端和服务器都知道客户端密钥。
  • 对于API的每次调用,必须发送accesstoken以检查访问权

我看到第二种方法的问题是服务器向客户端发送了accessstoken,如果有人在哪里得到它,他们就可以访问用户。

在现实世界中如何完成?

1 个答案:

答案 0 :(得分:1)

您可以稍微修改第一

  • 在客户端上存储用户名和密码
  • basic-auth over https

在客户端上存储密码 hash ,然后发送散列并将其与数据库中的散列进行比较等同于在数据库中存储纯文本密码,因为散列变为密码即可。因此,您的应用应使用用户和密码进行身份验证,就像任何人类用户一样。

但您对第二种方法的关注也适用。如果有人拦截了该消息,他就有你的凭据。

更安全的解决方案是 HMAC身份验证(现在我们正在谈论"现实世界")。

  • 用户拥有存储在服务器和客户端上的密钥
  • 每个请求都被规范化(转换为不同的字符串,其中包含请求方法,URI,参数和时间戳)
  • 规范化请求使用密钥在HMAC中进行哈希处理,哈希和用户ID在HTTP Authorization标头中传递
  • 在服务器上,使用相同的算法生成散列(使用来自HTTP Date标头的时间戳)并与发送的散列进行比较。
  • 如果结果相同,则对请求进行身份验证

示例是 Amazon S3 REST API - 链接文档也是如何为您自己的API实现它的一个很好的示例。