iOS OAuth 1.0 requestToken用户授权:如何检测UIWebView何时完成授权?

时间:2012-04-11 05:01:50

标签: ios oauth uiwebview

我正在iPhone应用程序上完成OAuth 1.0流程。

我有requestToken。我使用正确的URL来访问UIWebView,以执行requestToken的用户授权,该授权成功执行。但是,在完成此步骤后,用户必须手动点击“返回”以返回应用程序。然后用户点击一个单独的按钮来执行getAccessToken。 (这显然正在进行中)。

如何在执行requestToken的用户授权后自动执行返回操作?在UIWebView上,当用户成功登录时,他们会获得一个页面验证权限,并且用户单击“确定”,我希望应用程序自动返回并在完成后继续获取accessToken。

我是新手,所以可能无法解释这个问题。 FWIW,我正在使用smugmug API。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我不是iOS编码器,但是一旦最终用户授权了请求令牌,服务提供商就应该重定向到您的回调。必须有一种方法让你在UIWebView中“监听”这个。通过选择看起来像这样的重定向HTTP响应:

301 Moved Permanently
Location: URI?oauth_token=BLAHBLAH&oauth_verifier=BLAHBLAH

如果您可以拦截该重定向,则可能阻碍UIWebView实际完成它,而只是刮掉Location头。

或者,您至少应该能够在重定向完成时接听并且您实际上在回调页面上。然后,从不可见的地址栏中抓取包含令牌和验证者的URL将是一个简单的情况。如果所有其他方法都失败了,你可以让你的回调实际打印页面上的令牌和秘密并刮掉它。

一旦你有了验证者,你应该能够获得你的访问令牌,而根本不涉及最终用户。

答案 1 :(得分:0)

我通过查找特定的URL解决了这个问题,然后在正确的URL加载完成后手动弹出navigationController堆栈。我的代码看起来像:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSRange range = [webView.request.URL.absoluteString rangeOfString:@"http://thecallbackurl.com/"];
    if (range.location != NSNotFound) {
        [self.navigationController popViewControllerAnimated:YES];
    }
}

我写信给smugmug.com API。在令牌授权成功时,他们将浏览器重定向到回调URL,以便我正在寻找。