Restful API:如何安全地访问api?

时间:2012-01-30 09:15:04

标签: restful-authentication restful-architecture

我刚开始阅读有关实施RESTful Web服务和创建RESTful apis的内容。我已经理解了REST的基本概念,但我一直在摸索我将如何安全地实现它?

比如说,我的webapp有一个用户登录过程。成功登录后,我还应该在RESTful请求中传递哪些内容以在服务器上进行身份验证? 我能想到的是以下过程:

  • 用户登录(POST用户名/密码到API)
  • API使用用户密钥
  • 进行响应
  • userkey存储在本地
  • 在进行任何进一步请求时,我将此密钥包含在请求身份验证

但是,userkey似乎是我发送给API的状态,但REST恰好是无状态的。如果发送GET请求,这也不太安全。

OAUTH能解决我的困境吗?或者其他一些方式?有人可以指导我......

由于

2 个答案:

答案 0 :(得分:3)

UserKey,或者更好地称之为令牌,是客户端状态。您的RESTful API将保持无状态,因为它将此标记存储在何处。

通常这个令牌是一些片段(用户名,密码,登录日期)的组合,散列为MD5,SHA(或任何其他algorythm)。 每当客户端调用RESTful API的操作时,您的服务都会将传入令牌与使用相同段的即时生成的令牌进行比较。如果两个生成的令牌都相等,则请求进行身份验证。

GET或POST方法没有问题:您需要从查询字符串或HTTP标头中检索令牌。

确保连接安全的关键是通过SSL调用RESTful API,以便您的通信具有高度的安全性。

GET和使用查询字符串发送此令牌的一个重要问题可能是它太长而且URL长度限制会阻止除了令牌本身之外还有很多参数。

在我看来,你应该使用POST动词,因为你可以发送更多的数据,它更灵活,你可以避免在查询字符串中提供有问题的参数,这在记录方面可能不好,因为你要记录用户名,密码,令牌和其他内容,如果黑客窃取您的日志(或者某些不受欢迎的人也会检查您的日志),这些敏感信息可能会危害您的用户。

答案 1 :(得分:2)

OAuth是无国籍的 - 这是一个证明有人授权客户做某事的代币 - 比如政府授权公民在街上开车的驾驶执照。

所以 - 是的 - 使用OAuth。