我正在开发一个 Web 应用程序,该应用程序将 SSO 与外部 CAS 服务器结合使用。流程是:
使用 PWABuilder 创建了一个封装 Web 应用程序的 Android 应用程序,效果很好。
在 iOS 上也使用 PWABuilder 创建了相同的封装 Web 应用程序,它创建了一个带有 WebView 的本机 Swift 应用程序,允许在本机 iOS 应用程序中加载 PWA。但身份验证工作流程无法正常工作。
我可以在 iOS 应用程序中正确访问 CAS 服务器的登录页面 (iamfromhere.com/login)。但是,提交表单时,Safari 中会打开一个新窗口(看起来位于 iOS 应用程序之外),并再次显示相同的登录页面 (iamfromhere.com/login)。
如果我尝试再次提交表单,我将被重定向到正确登录的身份提供商网站 (iamfromhere.com/home),而不是被重定向到 iOS 应用程序 (myapp.com/home)。 如果我关闭浏览器窗口,我会在第一个 iamfromhere.com/login 上返回到 iOS 应用程序。
绿色实线箭头表示正常工作,绿色虚线箭头表示预期行为,蓝色箭头表示发生的情况和预期之外的情况。
manifest.json
文件将 display
设置为 standalone
。
封装的PWA部署目标是iOS 13。
在 Xcode 模拟器 iPhone 15 pro - iOS 17、带有 iOS 17 的真实 iPhone 13 和带有 iPadOs 16.7.4 的第五代 iPad 上遇到了该行为。
我没有 PWA 和 iOS 方面的专业知识,但我尝试过但没有成功:
WebView.swift
文件中,将 config.limitsNavigationsToAppBoundDomains
设置为 false
<meta name="apple-mobile-web-app-capable" content="yes">
中添加
index.html
编辑: 我设法通过将域 iamfromhere.com 添加到
authOrigins
中的 Settings.swift
和 WKAppBoundDomains
中的 Info.plist
来使身份验证流程正常工作。
但是,该应用程序仍会在 Safari 的新窗口中作为重复项打开。
@agatherc 你解决这个问题了吗?我遇到了与新 Safari 窗口打开相同的问题,这破坏了我们的身份验证流程。 (抱歉,我还没有评论权限)
如果有帮助,很明显,在第二个窗口中,它正在发出 GET 请求,而不是像应有的那样在原始窗口中进行 POSTing。
此外,当按下提交按钮时,我在 XCode 模拟器控制台中看到了这一点:
-[RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:] perform input operation requires a valid sessionID