我正在为Windows Phone和Android创建应用。所以现在我正在建立一个他们都可以使用的webapi,但是我想要保护它,而不是其他我的应用程序可以使用它。我该怎么办呢?没有其他人,那么我的应用程序将访问这些API。
我不想实施OAuth。
我有两个我想到的场景:
首先(我在客户端存储用户名和哈希密码):
第二次(我在客户端存储了accessstoken):
我看到第二种方法的问题是服务器向客户端发送了accessstoken,如果有人在哪里得到它,他们就可以访问用户。
在现实世界中如何完成?
答案 0 :(得分:1)
您可以稍微修改第一:
在客户端上存储密码 hash ,然后发送散列并将其与数据库中的散列进行比较等同于在数据库中存储纯文本密码,因为散列变为密码即可。因此,您的应用应使用用户和密码进行身份验证,就像任何人类用户一样。
但您对第二种方法的关注也适用。如果有人拦截了该消息,他就有你的凭据。
更安全的解决方案是 HMAC身份验证(现在我们正在谈论"现实世界")。
Authorization
标头中传递Date
标头的时间戳)并与发送的散列进行比较。示例是 Amazon S3 REST API - 链接文档也是如何为您自己的API实现它的一个很好的示例。