从巴黎的 Symfony Live 2012 回来,我很幸运地参加了“设计 HTTP 接口和 RESTful Web 服务”会议,我对如何构建一个 RESTful API 并同时保持其私有和成员身份提出了很多问题。
目前我曾经生成一个 API 密钥来使我的 API 私有(我的意思是我自己的第三方应用程序可用,但最终用户可用)。
为了确保注册用户可以使用 API(通过移动应用程序),我使用了 Cookie,好吧,我使用了 SESSION。
但是根据演讲(以及我在网上阅读的其他资源),这不是正确的做法。
我的需求如下:
- 提供只有我的移动应用可以使用的私有 API
- 允许(不同角色的)成员执行不同的操作(即:成员可以发表评论,而管理员可以全部编辑)
由于 REST 约束是无状态的(除其他外),因此我不能使用 Cookie/Session,因为它们需要由客户端启动,并且会导致一些非幂等的结果。
我在这里和那里读到,保持我的 API RESTful 的一种方法是在每个请求上提供凭据。
目前,为了验证我的 API 密钥(使其保持私有),我使用自定义 HTTP 授权方案,类似于Authorization: MyApp SoMeToKeNV3RYPR!V4T3
然后使用 POST 方法验证我的成员(登录)(就像我在任何浏览器 Web 应用程序中所做的那样)。
您将如何实施此类案例?使用这种私有方案并继续使用会话是否可以接受?
经过一番阅读,我可能认为在每个请求上使用一些签名可以帮助解决这些问题。
可以使用第三方客户端中提供的用户凭据生成签名,同时使用公钥/私钥对其进行加密(以保持 API 的私密性)。
在每个请求上,签名将根据 CRC(或类似的东西)进行检查,而凭据将根据数据库进行检查(这似乎比检查会话不值得,不是吗?)
任何帮助/建议将不胜感激。
PS:OAuth 呢?我对此了解不多,但它可能是解决此类问题的方法吗?