2

如果唯一支持的流程是 HTTP 重定向,那么检索 OAuth 访问令牌的可移植方式是什么?例如,我想授权我的移动应用访问RunKeeper API

  1. 应用程序打开带有地址的浏览器https://runkeeper.com/apps/authorize?client_id=...&response_type=code&redirect_uri=MY_OWN_REDIRECT_URL
  2. 用户单击以允许访问,被重定向到MY_OWN_REDIRECT_URL?code=ONE_TIME_AUTH_CODE
  3. ???
  4. https://runkeeper.com/apps/token应用程序使用第 2 步中的一次性授权代码和客户端密码通过 POST 请求请求实际访问令牌

API 不支持 OAuth 设备配置文件(用户手动返回应用程序并输入几位数的代码)。我正在考虑在这种情况下我的选择是什么,特别是因为我希望用户立即返回我的应用程序。


选项1

将是我的移动应用程序中的内置 Web 服务器与应用程序内浏览器相结合,以便我可以提供 OAuth 重定向 URLhttp://localhost:XYZW并在一次性授权代码到达时捕获它。但我不知道这是否适用于流行的移动平台(目前是 Android/iOS,我为这些平台找到了 Mongoose Web 服务器的端口)。

选项 2

注册自定义 URI 方案,例如myapp-oauth-scheme://. 对于 RunKeeper,它似乎允许我重定向到此类自定义方案。而且我认为至少可以在 Android/iOS 上恢复我的应用程序,对吧?!WP8 / BB10 等其他平台呢?

选项 3

如果真的有必要,我只想走这条路:托管一个非常小的 Web 服务,用作 OAuth 重定向 URL 并保存任何传入的一次性授权代码。当用户被重定向时,他最终只会看到一个页面“现在请切换回应用程序”,然后应用程序会向网络服务询问它之前收到的一次性授权码。


所以毕竟,有没有更好的选择,你知道其中哪些可以在 Android/iOS 和其他平台上正常工作吗?

顺便说一句,我有一个基于 HTML 的应用程序 (PhoneGap),所以我什至不必使用外部浏览器。

4

2 回答 2

0

您可以结合选项 1 和 3 以获得可移植性和 UX 的最佳组合:

为身份验证提供应用内 Web 视图,但不要在设备上运行本地 httpd,而是为重定向目标使用最小的 Web 服务。这样用户就永远不会离开您的应用程序,您的登录页面也不需要告诉他们手动返回它。您的应用程序可以从您的 Web 服务中检索访问令牌,并在其 URL 更改后立即关闭 WebView。

顺便说一句,我工作的公司 Temboo 有一个您可以使用的最小 Web 服务,而不是构建和托管您自己的。查看我们的OAuth for RunKeeper助手。我们提供了一个回调服务,您可以将其用于重定向 url,它将为您存储身份验证令牌。我们还可以选择存储您的 RunKeeper 凭据,这样您就不必将它们与您的应用程序一起分发,并且可以在不推送客户端更新的情况下更新或使它们失效。

我们的Android SDK还可以为您规范对 RunKeeper API 的其余部分以及 100 多个其他 API 的访问。


刚看到你的编辑。如果您已经在使用 WebView,那就更好了。让用户留在应用程序中,跳过自定义 URL 方案,跳过应用程序内服务器的开销,只使用一个小型 Web 服务来捕获身份验证令牌。这在 iOS 和任何其他可以提供 WebView 等效项的平台上也可以正常工作。

于 2013-03-16T22:14:56.617 回答
0

您可以使用 socialauth android 在您的应用程序中集成 runkeeper api。身份验证后,您将能够获得访问令牌。

然后,您可以使用访问令牌来调用 runkeeper 的各种功能,例如获取活动。您可以查看 runkeeper 文档来拨打电话。

于 2013-06-24T05:10:12.600 回答