我们的应用程序中有一个OAuth流程,我们通过打开ASWebAuthenticationSession来执行“授权步骤”。当它完成时,我们从回调URL中解析出查询参数,进行验证,然后继续流的其余部分。
这对于深度链接(自定义应用程序模式)非常有效,但在使用通用链接时变得非常“脆弱”。
据我所知,Safari似乎会验证每个导航,并根据一些启发式方法确定是否应该触发通用链接。在大约50%的尝试中,它会很好,但在另外50%的尝试中,会发生常规导航,用户只会看到我们的oauth回调URL(加上相应的成功或不成功的查询参数),从而使ASWebAuthentication模式打开。
有人经历过这样的事情吗?知道是什么导致的吗
我们测试/检查:
- 使用https作为回调URL方案,或将其保留为nil。
- 重定向回带有路径的URL。
- 已验证我们的通用链接处理。
- 比较所有导航(状态代码、标头等),以了解成功流和不成功流之间的差异。什么都没有
- 通过控制台日志挖掘。
- 切换到对谷歌执行OAuth作为后端,仍然有50%的时间失败。
- 切换到使用AppAuth,而不是使用我们自己的解决方案。它还使用ASWebAuthSession,但仍有50%的时间失败。
1条答案
按热度按时间mum43rcc1#
根据我的经验,当通用链接最终出现在Web服务器上时,回到我们应用程序的唯一方法是让用户点击我们在该页面上生成的链接。
重定向或JavaScript点击该链接不起作用。看起来这是某种用户保护。
您是否考虑过使用URL方案?如果这样做,将调用完成闭包。Apple保证您的应用程序将收到回调,而其他应用程序不会注册相同的方案。
从documentation:
ASWebAuthenticationSession确保只有调用应用的会话接收身份验证回调,即使多个应用注册了相同的回调URL方案。
结论:通用链接只有在用户点击它们时才能正常工作。