为第三方应用程序开发人员构建的API验证用户身份

时间:2011-05-12 10:56:42

标签: iphone api

我正在为我的网站开发API的早期阶段,以便第三方开发人员可以为其构建iPhone应用程序。 API将具有完整站点的有限功能子集。我遇到的麻烦是下载应用程序的用户的安全性和身份验证。我提出了以下选择:

  1. 用户输入他们在网站上使用的相同凭据以进行身份​​验证。然后,在访问特定于用户的信息时,我的API将获取凭据。这是我最不喜欢的解决方案,因为第三方应用程序可以记录这些详细信息并在整个站点上恶意使用它们。
  2. 每个用户在网站上生成一个唯一密钥,然后他们可以在应用程序上使用该密钥进行登录。在访问特定于用户的信息时,我的API会将api密钥作为参数。但主要的问题是,即使用户没有授予应用程序许可权,任何应用程序都可以在用户获得对其密钥的访问权限后执行他们喜欢的操作。
  3. 为了克服上述问题,第三方开发人员必须向网站注册他们的应用程序,然后用户需要为他们希望使用的每个应用程序生成唯一密钥。然后,这将用于登录。这是我的首选解决方案,因为每个密钥对于每个应用程序都是唯一的,用户可以告诉哪个应用程序称为api以及用户是否批准了它。
  4. 我的最终选择是实施oAuth。我们目前正在等待2.0版本最终确定,并且没有时间继续更新我们的代码,因为规范可能会发生变化。
  5. 这是我必须构建的第一个API,我想知道我是否正确理解了这一点?我假设在选项1中,应用程序可以记录用户凭据并恶意使用它们,但是twitter如何通过第三方应用程序克服这个问题?或者仅仅由用户信任他们正在使用的应用程序?如果是这种情况,则在此期间选项2和/或3是可行的,直到我切换到选项4。

    感谢您的反馈意见。感谢

1 个答案:

答案 0 :(得分:2)

OAuth 1和OAuth 2都是可行的选择。但是,基本身份验证也会有很长的路要走(只要它通过SSL)。不要害怕:)

我在OAuth 1.0上实现了API提供程序。而且由于OAuth1.0有许多现成的库用于许多平台,我也不会害怕使用它,大部分工作已经完成,无论是作为提供者还是第三方实现者。

无论如何:您总是可以使用应用程序密钥和密码将基本身份验证与一些非常简单的请求签名相结合,例如,作为第三方开发人员,您必须致电。

https://yourapi.com/?user=11111&password=232123&random_string=23123&api_key=THIRD_PARTY_KEY&timestamp=1212121212signature=efefefefefef

API实现者必须使用秘密签署random_string,timestamp和api_key。那么你至少可以找到一种关闭恶意应用程序的方法。