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

Ste*_*eve 28 authentication api rest oauth restful-architecture

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

  1. 这将导致维护一组代码
  2. 如果我们决定公开第三方开发者的API,那么它已经完成了
  3. 它开辟了制作消费它的移动应用程序的可能性
  4. 我真的想学习如何做到这一点

API将托管在子域中https://api.example.com,主Web应用程序将托管在根域中https://example.com.

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

  1. 从中获取请求令牌 https://api.example.com/request_token
  2. 重定向用户以进行身份​​验证 https://api.authenticate.com/authorize
  3. 重定向回第三方应用程序
  4. 从中获取访问令牌 https://api.example.com/access_token

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

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

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

我是不是太复杂了?

Jon*_*der 20

我遇到了同样的问题并像这样解决了.

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

2 对于我自己的第三方客户端(移动,AIR等) -他们使用OAuth,与我让这些直接在授权步骤发送的用户名和密码的区别(这样我就可以让本地登录的对话).这是因为您的API通过SSL/HTTPS.

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

  • 你能详细说明第3项吗?当用户登录时,您是在cookie中保存会话ID,然后在进行API调用时将其用作伪访问令牌,然后在收到API请求时查找它?这似乎是一个安全漏洞...... (2认同)