2012-01-30 204 views
2

我刚刚开始阅读关于实现RESTful Web服务和创建RESTful API的信息。我已经理解了REST的基本概念,但我一直在探索如何安全地实现它。Restful API:如何安全地访问api?

说例如,我的web应用程序有一个用户登录过程。成功登录后,还应该通过哪些RESTful请求在服务器上进行身份验证? 我能想到的是以下过程:在(POST用户名/密码API)

  • 用户登录
  • API与用户钥响应
  • 用户钥存储在本地
  • 当进行任何进一步请求,我在请求中包含此密钥进行身份验证

但是,userkey似乎是我发送到API的状态,但REST恰好是无状态的。此外,在发送GET请求的情况下,这并不太安全。

OAUTH是我困境的解决方案吗?或者以其他方式?有人能指导我这个...

感谢

回答

3

UserKey或更好的称呼它标记,是一个客户端状态。您的RESTful API将保持无状态,因为它将此令牌存储在哪里。

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

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

保护连接的关键在于通过SSL调用您的RESTful API,因此您的通信将具有高度的安全性。

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

在我看来,你应该使用POST动词,因为你可以发送更多的数据,它更灵活,并且避免在查询字符串中给出有问题的参数,这在日志记录方面可能很糟糕,因为你要记录用户名,密码,令牌和其他信息,这些信息是敏感信息,如果黑客窃取了您的日志(或者一些不需要的人也会检查您的日志),这些信息可能会危及您的用户。

2

OAuth是无状态的 - 这是证明某人已授权客户端做一些象征 - 就像一个驾驶执照,其中政府已授权一个公民驾驶在街上的一辆车上。

所以 - 是的 - 使用OAuth。