我刚开始阅读有关实施RESTful Web服务和创建RESTful apis的内容。我已经理解了REST的基本概念,但我一直在摸索我将如何安全地实现它?
比如说,我的webapp有一个用户登录过程。成功登录后,我还应该在RESTful请求中传递哪些内容以在服务器上进行身份验证? 我能想到的是以下过程:
但是,userkey
似乎是我发送给API的状态,但REST恰好是无状态的。如果发送GET
请求,这也不太安全。
OAUTH能解决我的困境吗?或者其他一些方式?有人可以指导我......
由于
答案 0 :(得分:3)
UserKey,或者更好地称之为令牌,是客户端状态。您的RESTful API将保持无状态,因为它将此标记存储在何处。
通常这个令牌是一些片段(用户名,密码,登录日期)的组合,散列为MD5,SHA(或任何其他algorythm)。 每当客户端调用RESTful API的操作时,您的服务都会将传入令牌与使用相同段的即时生成的令牌进行比较。如果两个生成的令牌都相等,则请求进行身份验证。
GET或POST方法没有问题:您需要从查询字符串或HTTP标头中检索令牌。
确保连接安全的关键是通过SSL调用RESTful API,以便您的通信具有高度的安全性。
GET和使用查询字符串发送此令牌的一个重要问题可能是它太长而且URL长度限制会阻止除了令牌本身之外还有很多参数。
在我看来,你应该使用POST动词,因为你可以发送更多的数据,它更灵活,你可以避免在查询字符串中提供有问题的参数,这在记录方面可能不好,因为你要记录用户名,密码,令牌和其他内容,如果黑客窃取您的日志(或者某些不受欢迎的人也会检查您的日志),这些敏感信息可能会危害您的用户。
答案 1 :(得分:2)
OAuth是无国籍的 - 这是一个证明有人授权客户做某事的代币 - 比如政府授权公民在街上开车的驾驶执照。
所以 - 是的 - 使用OAuth。