关于使用OAuth使用自己的API的问题

时间:2011-12-15 22:07:10

标签: api authentication rest oauth restful-architecture

我正在为我正在开发的项目构建一个RESTful API,我想让主应用程序使用API​​,因为:

  1. 这将导致维护一组代码
  2. 我们是否应该决定公开第三方开发者的API,它已经完成了
  3. 它开辟了制作消费它的移动应用程序的可能性
  4. 我真的想学习如何做到这一点
  5. API将托管在子域https://api.example.com上,主Web应用程序将托管在根域https://example.com上。

    从概念上讲,我理解一切是如何运作的,但我的主要问题是如果认证流程将会发生变化。通常第三方应用程序会:

    1. https://api.example.com/request_token
    2. 获取请求令牌
    3. 将用户重定向到https://api.authenticate.com/authorize
    4. 上的身份验证
    5. 重定向回第三方应用程序
    6. https://api.example.com/access_token
    7. 获取访问令牌

      由于我控制两个域,我可以做类似的事情:

      1. 当用户登陆https://www.example.com
      2. 的登录屏幕时获取请求令牌
      3. 用户使用https://www.example.com上的表单进行身份验证,该表单调用与https://api.example.com/authorize相同的代码
      4. 如果凭据有效,则交换请求令牌以获取访问令牌
      5. 访问令牌保存在会话中,当用户注销时
      6. 会过期

        第3步觉得它错了,因为会有重复的代码,但不会打开我的XSS攻击是https://www.example.com上的登录表单将数据发送到https://api.example.com,因为它们是< em>技术上不同的域名?

        我是否过于复杂?

2 个答案:

答案 0 :(得分:20)

我遇到了同样的问题,并解决了这个问题。

<强> 1 对于使用我的API的第三方应用,他们必须通过OAuth对所有请求进行身份验证。

<强> 2 对于我自己的第三方客户端(移动设备,AIR等) - 他们使用OAuth,区别在于我允许这些客户端直接在授权步骤中发送用户名和密码(因此我可以进行本地登录对话)。这是因为您的API是通过SSL / HTTPS。

第3 对于我的Web应用程序,我使用cookie身份验证来访问API。即登录后,用户可以简单地调用API:urls并返回JSON / XML。很适合快速浏览API(尽管像APIGee这样的真实API控制台在那里做得更好)。

答案 1 :(得分:0)

我会说你过度复杂了一点。如果您的代码正确分离,您可以轻松地在应用程序的服务层上构建一个瘦REST层,同时让应用程序的控制器成为服务层上的薄层。