休息方法:用于在登录后实现后续的api调用

时间:2012-04-30 10:46:41

标签: php rest restful-authentication hmac

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

请仔细阅读下面的工作流程,尽量清除疑虑并指出错误 -

  1. 客户端(网络浏览器) 来自客户的休息电话 - > / post / login username / password

  2. 服务器 / login服务检查数据库是否用户名&密码是正确的 回复确定:200 +发回数据 - > X

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

  4. / GET / FirstName_of_User / X 或

    / GET / LastName_of_User / X

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

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

    2. 返回此X后,应将其存储在客户端,以便每次后续请求都可以起诉? (Cookie或其他方式存在)?

    3. 如果这是我如何进行后续通话
      /获得/ FirstName_of_User / X

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

      Reg question 3 - 我在stackoverflow上找到了这个链接 - Is session used to REST authentication?

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

      我对这种方法的疑问是 - 假设我使用密码作为客户端和服务器都知道的私钥..然后在客户端,我们应该只在密码中保存密码,每次后续请求都要消息吗? / p>

      由于 感谢任何疑惑的任何帮助

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

2 个答案:

答案 0 :(得分:0)

/user/id?access_token=42342342342423

休息apis不需要没有SEO,所以删除firstname_of_user,只需使用id,更简单,更清洁,更少维护。

答案 1 :(得分:0)

不管怎样,你的要求以及我们在项目中实施的内容看起来都是相同的,除了不同的平台,我们的是.net。

使用用户名和密码对登录资源执行相同的过程。一旦您决定要对此令牌进行签名的机制,就不一定要将其附加在URL中。

  1. 不是在URL中发送令牌,而是使用http协议的授权头进行尝试。使用Authorization = "Authorization" ":" credentials Ref
  2. 通过这种方式,您可以保持您的网址相同,但根据身份验证,您可以提供资源。

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

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

    3. 希望这能在某种程度上帮助你。