iPhone Web 应用程序中的 OAuth 回调

Posted

技术标签:

【中文标题】iPhone Web 应用程序中的 OAuth 回调【英文标题】:OAuth callbacks in iPhone web apps 【发布时间】:2011-10-27 10:59:47 【问题描述】:

我正在构建一个全屏 iPhone 优化的网络应用程序。它像原生应用一样从主页启动,并通过以下指令像独立应用一样运行,但它只是普通的 html/CSS/javascript,不涉及 PhoneGap。

<meta name="apple-mobile web-app-capable" content="yes" />

当尝试通过 OAuth 进行身份验证时,重定向到 Twitter(或任何其他 OAuth 提供程序)会将我从全屏 Web 应用程序中带出并进入 Mobile Safari。 Twitter 身份验证完成后,重定向回我的应用程序不会启动我的主页应用程序,而只是在 Mobile Safari 中重定向。是否可以在 iPhone 主页 Web 应用程序中进行 OAuth?除此之外,我能否获得 OAuth 回调以重新启动我的主页网络应用程序?

【问题讨论】:

只是想说没有办法以编程方式重新启动应用程序(也许你可以在越狱设备上但在正常情况下不行) 只是为了澄清。由于您正在构建一个 Web 应用程序,因此您已经在 Mobile Safari 中。你的意思是说认证页面在Safari的新页面中打开? 当您将 iPhone 优化的网络应用程序保存到主页并从那里运行时,它实际上并没有在 Safari 中打开。好吧,它仍然由 Safari 在幕后呈现,但它像一个独立的应用程序一样启动。它在快速应用切换任务栏和所有内容中都有自己的图标。问题是指向 Twitter 的链接离开了该容器。 【参考方案1】:

我假设您有一个“清单”元标记来引用 manifest.json 文件。

我建议您执行以下解决方法。它在 ios Safari 网络应用上完美运行:

https://***.com/a/52286655/8390589

【讨论】:

【参考方案2】:

我最近遇到了类似的问题,发现如果您在 Javascript 中使用 window.location.href="http://example.com/whatever" 设置 URL,那么 iOS 不会切换到 Safari。我已经设法让 PayPal 结账和 Facebook 登录在独立的网络应用程序中工作,而无需使用这种方法切换到 safari!如果您要提交表单,也可以通过 JS 执行此操作并从响应中获取重定向 URL,然后设置位置。至于事后交还给你的应用,就看外部服务的工作方式了。

如果这样做不好,您可以在他们切换到 Safari 之前弹出alert('You will be passed to Safari for authentication. Reload this app afterwards.')。不是很好,但比自动切换应用程序让他们感到惊讶更好!

【讨论】:

如果您请求特定权限范围(例如googleapis.com/auth/youtube)并且您有多个与您的登录相关联的帐户,Google OAuth 仍然坚持从“选择帐户”屏幕切换到 Safari。

以上是关于iPhone Web 应用程序中的 OAuth 回调的主要内容,如果未能解决你的问题,请参考以下文章

[OAuth2 / Azure AD B2C参数已从iOS的外部Web浏览器中剥离

Salesforce PhoneGap iPhone 应用程序中的 oAuth2 问题(远程访问应用程序授权问题)

OAuth 2.0:在授权代码流程中,谁最终将访问令牌交给我的 Web 浏览器?

当 iPhone 应用程序在向表中插入数据时或期间退出时,如何回滚 SQLite DB?

Android 中的 OAuth 实例状态

用户接受权限后重定向回应用程序 Oauth2