0

我目前正在为 phpBB 开发一个 API,作为我的 Google Summer of Code 项目的一部分。API 的重点是使开发人员能够创建连接到 phpBB 板的应用程序。

用户需要一种正确的身份验证方式(显然让用户直接在应用程序中输入他的用户名和密码是一个坏主意),我一直在考虑多种方式来做到这一点。

我已经完成了自己的实现,但与我交谈过的人说我宁愿使用 OAuth。我已经阅读了一周的有关 OAuth 的信息,但我不完全确定在这种情况下应该如何使用它。我从三足 OAuth 中收集到的是,应用程序开发人员必须在服务中注册他的应用程序才能在获取客户端令牌之前接收消费者令牌。这实际上是不可能的,因为开发人员不能真正在所有 phpBB 板上注册他的应用程序。

我一直在考虑应用程序是否会自动从服务器获取消费者令牌,然后是客户端令牌,但对我来说,这听起来像是违背了三足 OAuth 的观点。

我已经阅读了一些有关两足 OAuth 的信息,但据我所知,您不应该将其用作身份验证,而更多地用于内部应用程序?

目前我实现的认证系统是这样的:

  1. 应用程序向 phpBB 板请求身份验证令牌和签名令牌
  2. 提示用户以令牌为参数访问phpBB板上的认证页面
  3. 应用程序使用 phpBB 板验证令牌是否有效,用户必须在浏览器中通过身份验证阶段后告诉应用程序执行此操作
  4. 例如,在执行请求时,/api/forums/2/topics应用程序会将身份验证令牌和序列号添加到请求中:/api/forums/2/topics?auth_token=token&serial=2其中序列号是一个不断增加的数字,以阻止重放攻击。然后应用程序使用 HMAC-SHA256 对请求进行哈希处理,并将其作为另一个 GET 参数附加到请求中。服务器执行相同的散列以查看它是否正确。通过这种方式,攻击者无法伪造请求,除非他们在初始交换时获得了签名令牌。

我试图弄清楚我是否应该尝试实现 OAuth 而不是这个,同时尝试了解 OAuth。简而言之:OAuth 如何在不让开发人员为每个服务注册的情况下跨多个服务工作?

4

1 回答 1

1

如果没有集中式服务,OAuth 可能不是正确的选择。即使您允许开发人员为给定实例动态创建应用程序条目,他们仍然需要先在每个实例上注册,以便您也知道与谁关联 OAuth 应用程序。

也许像HTTP 签名这样的东西会更好地满足您的需求?

于 2013-08-02T19:30:15.620 回答