适用于Android / iOS应用的OAuth网络流程

时间:2013-03-16 21:23:36

标签: android ios oauth authorization windows-phone-8

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

  1. 应用会打开地址为https://runkeeper.com/apps/authorize?client_id=...&response_type=code&redirect_uri=MY_OWN_REDIRECT_URL
  2. 的浏览器
  3. 用户点击以允许访问权限,重定向到MY_OWN_REDIRECT_URL?code=ONE_TIME_AUTH_CODE
  4. ???
  5. App使用来自步骤2的一次性授权代码和客户端密钥向https://runkeeper.com/apps/token发送POST请求请求实际访问令牌
  6. API不支持OAuth设备配置文件(用户手动返回应用并输入几位数代码)。我正在考虑在这种情况下我的选择是什么,特别是因为我希望用户立即返回我的应用程序。


    选项1

    将在我的移动应用中与应用内浏览器结合使用内置网络服务器,以便我可以提供http://localhost:XYZW的OAuth重定向网址并抓住其中一位 - 时间授权码到达时。但我不知道这是否适用于流行的移动平台(Android / iOS目前,我为这些平台找到了Mongoose网络服务器的端口)。

    选项2

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

    选项3

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


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

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

2 个答案:

答案 0 :(得分:0)

您可以将选项1和3结合起来,以实现便携性和UX的最佳组合:

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

顺便说一下,我工作的公司Temboo,只有这么简单的网络服务,你可以使用而不是建立和托管你自己的。查看我们的OAuth for RunKeeper帮助器。我们提供了一个可用于重定向网址的回调服务,该服务将为您存储身份验证令牌。我们还可以选择存储您的RunKeeper凭据,这样您就不必将它们与您的应用一起分发,并且可以在不推送客户端更新的情况下更新或使其无效。

我们的Android SDK也可以为您和其他100多个API规范化对其余RunKeeper API的访问。


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

答案 1 :(得分:0)

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

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