0

我正在尝试实施 Rest 方法来设计我的 Api。

请通过下面的工作流程并尝试消除我的疑虑并指出错误-

  1. 客户端(Web 浏览器)来自客户端的 Rest 调用 ->/post /login 用户名/密码

  2. 服务器 /login 服务与数据库检查用户名和密码是否正确响应 ok:200 + 发回数据-> X

  3. 客户端收到用户已通过身份验证的确认 + 数据 -> X 现在使用数据 X 对服务器进行后续调用,以通过其他服务调用获取用户特定信息

/get/FirstName_of_User/X 或

/get/LastName_of_User/X

现在我的疑问如下(执行以下操作的最佳做​​法是什么)

  1. 因为对于后续请求,我们需要告诉服务我们请求谁的数据,X 应该是什么?(创建的用户名或临时令牌(没有意义,因为 Rest 完全是关于无状态的)或其他什么?)

  2. 一旦这个 X 被返回,它应该存储在客户端的哪里,以便可以为每个后续请求起诉它?(Cookie 或其他方式存在)?

  3. 如果这是我进行后续调用的方式
    /get/FirstName_of_User/X

如果这个电话也是由其他人发出的,那么它会给出结果,我希望刚刚登录的人只得到结果..

注册疑问 3 - 我在 stackoverflow 上找到了这个链接 - 会话是否用于 REST 身份验证?

建议使用 HMAC 并找到此链接 - http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/它讨论了如何将 HMAC 用于 Rest(基本上讨论了客户端和服务器上的私钥并使用它来散列请求)..

我对这种方法的怀疑是 - 假设我使用密码作为客户端和服务器都知道的私钥..那么在客户端我们应该将密码保存在 cookie 中,然后散列每个后续请求吗?

感谢您对任何疑问的任何帮助表示赞赏

PS:我正在尝试使用 PHP + Mysql 实现系统

4

2 回答 2

0
/user/id?access_token=42342342342423

rest api 不需要 SEO,所以去掉 firstname_of_user,只使用 id,更简单,更干净,更少维护。

于 2012-04-30T10:50:20.930 回答
0

不知何故,您的要求和我们在项目中实现的内容看起来是一样的,除了不同的平台,我们的是 .net。

使用用户名和密码对登录资源执行相同的过程。一旦你决定了你想要签署这个令牌的机制,它不是强制性的,它总是附加在 url 中。

  1. 不要在 URL 中发送令牌,而是尝试使用 http 协议的授权标头。使用Authorization = "Authorization" ":" credentials 参考

这样,您可以保持您的 url 相同,但基于身份验证您可以提供资源。

  1. 您可以将此令牌存储在 cookie 中以供后续请求使用。

  2. 从 url 中删除令牌可以解决您的第三个疑问。

希望这能在一定程度上帮助你。

于 2012-05-01T17:25:03.320 回答