对每个调用进行Restful web服务API用户身份验证


Restful web service API user authentication on every single call

我需要创建一个REST api来第一次对用户进行身份验证,并为后续调用检索基于该用户的其他信息。如果我没有弄错的话,Restful服务是无状态的,因此不需要在服务器端存储用户信息。我的问题是如何保证所有后续呼叫的用户身份验证没有会话?

这个服务需要创建一个android应用程序,可以在移动设备上显示信息

您可以使用OAuth,这是一种广泛使用的标准。

另一个选择是在SSL上使用BASIC身份验证。任何像样的HTTP库都会支持BASIC验证。客户将在第一次提出请求时受到质疑。后续请求需要通过安全线路发送BASIC验证头。

有一种方法,你传递一个秘密给你的客户端,并使用HMAC-SHA256发送URL参数的哈希到服务器。亚马逊就是这样做的,有一篇文章介绍了这是如何做到的。它不像OAuth那样复杂。

有许多可用的方法,但在我看来,最好的方法是生成一个AuthToken服务器端,并在成功登录后返回给客户端。然后客户端在向服务器发出的每个请求中都包含这个。

我通常做的是创建一个MD5散列的秘密密钥和用户的id-用户的用户名-用户的密码-和当前日期时间。然后将令牌和当前日期时间存储在数据库中。在查找之后,我解码令牌并将数据点与db值进行比较,如果它们与用户匹配则很好。这种方式是无状态的,并且易于扩展。