2

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

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

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

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

OAUTH 能解决我的困境吗?还是其他方式?有人可以指导我吗...

谢谢

4

2 回答 2

3

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

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

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

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

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

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

于 2012-01-30T09:29:58.403 回答
2

OAuth 是无国籍的——它是一种证明某人已授权客户做某事的令牌——例如政府授权公民在街道上驾驶汽车的驾驶执照。

所以 - 是的 - 使用 OAuth。

于 2012-01-30T09:27:50.400 回答