【问题标题】:How do I get the Twitter API to respect the callback parameter with OAuth?如何让 Twitter API 尊重 OAuth 的回调参数?
【发布时间】:2010-11-11 22:00:12
【问题描述】:

我正在开发一个理想情况下使用 OAuth 与 Twitter 通信的 iPhone 应用程序。我知道很多人都在使用 UIWebView 在他们的应用程序中执行 OAuth 工作流程,但我不同意这一点,我将使用 Pownce approach

问题是,Twitter 拥有使用 PIN 码来处理桌面应用程序的整个方案。当我在 Twitter 上注册我的应用程序时,他们有一个 Web 表单,询问我是桌面客户端还是 Web 客户端。如果我选择桌面客户端,当我尝试让用户授权时,我可以设置 oauth_callback 参数,但 Twitter 会在授权后忽略它并显示一个密码。如果在 twitter 的表单上,我指定我是一个网络客户端,它要求我输入一个 URL 以在授权后重定向到。而且,由于我使用的是 iPhone 应用程序特定的 url 方案,因此他们的 web 表单在验证时失败,因为它似乎只接受符合 HTTP 协议的 URL。

所以,我好像被卡住了 - 我不能说“桌面”,因为我不想打扰别针,我不能说“网络”或者我不能使用 iPhone应用网址。有什么解决办法吗?

【问题讨论】:

    标签: iphone twitter oauth


    【解决方案1】:

    根据您的问题:

    我知道很多人在他们的应用程序中使用 UIWebView 执行 OAuth 工作流程,但我不同意这一点,我将采用 Pownce 方法。

    Pownce 文章建议退出您的应用程序并打开 Mobile Safari 执行身份验证步骤是有问题的,并且他们开始收到用户的差评。他们也经历了大约 40% 的失败率。

    Pownce 的解决方案是在您的应用程序中使用 UIWebView,所以我感觉您可能误解了他们的建议。话虽如此,他们确实将其标记为“幼稚”的解决方案,并继续提出一堆理论上的“理想”解决方案。

    您可能没有意识到的另一点是桌面应用程序(使用“带外”/pin 编号方法)网络应用程序需要在嵌入式或外部浏览器中打开 Twitter 站点。

    所以你在 iPhone 上有两个选择:

    1. 在 UIWebView 中打开 twitter.com,不指定 oauth_callback 参数或 oauth_callback=oob 以启动基于 pin 的带外流。然后,用户需要使用 iPhone 的复制粘贴功能复制 pin,手动关闭 UIWebView,然后将 pin 粘贴到您的应用程序中。然后可以使用该 pin 转换为访问令牌。
    2. 按照其他人的做法去做(UIWebView + custom-uri://foo.bar 在回调参数中)。

    出于显而易见的原因,第一个选项非常垃圾,并且仅在 Twitter 无法重定向到自定义 URI 的平台上真正有用。

    【讨论】:

    • 我确实看到了 40% 的数字,但不确定我在多大程度上同意 Mike 的结论。我实际上是属于 40% 的人之一,因为我下载了 Pownce iPhone 应用程序然后想起我并没有真正使用过 Pownce。看起来我不得不采用你的方法#2,这似乎很不幸。
    • 我很想听听您对为什么方法 #2 不太理想的看法。这比简单地输入您的用户名/密码更麻烦,但还有哪些其他问题?
    • 并不是说工作量大,而是违背了OAuth的精神。他们没有让用户将凭据输入他们信任的地方(在移动 Safari 中明显归 twitter 拥有的页面),而是将他们的信息直接放入我的应用程序中,谁知道我在那里用它做什么。
    【解决方案2】:

    一个简单的解决方案可能是创建一个始终向您的自定义 URL 方案发送 301 重定向的 HTTP 页面,然后将该 HTTP URL 提供给 twitter Web API。

    除此之外,Nathan 的回答非常完整。

    【讨论】:

      【解决方案3】:

      我是这样做的:告诉 Twitter 你是一个 Web 应用程序,并在注册 oauth 客户端期间编造任何旧的 HTTP:// URL 以满足 Twitter。

      然后在您的应用程序中,在回调参数中传递您想要的 URL。 Twitter(根据我的经验)使用你给它的那个。

      【讨论】:

        【解决方案4】:

        您可以使用中间网站进行身份验证。您的应用程序创建一个唯一 ID(基于硬件?)并存储它。然后它记录它已发送用户进行身份验证并将唯一 ID 发送到您的网站。然后它将用户重定向到您的网站。然后,您的网站使用 oAuth 将用户发送到 Twitter。用户返回您的网站,您将唯一 ID 标记为已通过身份验证并存储身份验证信息。用户在 iPhone 上重新启动应用程序,它读取它已发送用户进行身份验证并使用唯一 ID 联系您的网站 - 并读入身份验证信息。

        冗长,需要另一个网站,但它应该可以工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-07
          • 2011-12-23
          • 1970-01-01
          • 1970-01-01
          • 2014-11-05
          • 2016-08-13
          • 2021-08-10
          • 1970-01-01
          相关资源
          最近更新 更多