OpenID 授权用户后 PWA 冻结 [iOS Safari Standalone]
我为我们的安全人员构建了一个简单的 PWA,允许员工单击链接并查看有关我们公司在各种事务上的政策的内容。该应用程序使用 Microsoft 的 OWIN 中间件库来授权我们的员工通过其企业 Microsoft 登录凭据访问该应用程序。当用户单击登录页面上的“员工登录”提示时,他们将被重定向到 Microsoft 的域以完成登录过程。登录完成后,他们将被重定向回我们应用程序的主页。
问题
问题出现了only当 iOS 用户 (v13) 将应用程序固定到主屏幕,然后以独立模式启动应用程序时,并且仅after用户已完全终止应用程序然后返回。我们已经在 Chrome、Safari(非独立模式)、Firefox 上测试了该应用程序,这些浏览器中不存在该问题。该应用程序可以无缝运行,直到用户完成 Microsoft 登录并重定向回主页。此时,如果用户单击指向另一个页面(在应用程序内)的链接,则该应用程序将完全锁定,不会响应进一步的按钮单击,并且不会加载用户提示的页面。控制台中不会抛出任何错误。
我们发现,如果用户切换到另一个应用程序(即使只是一秒钟),然后在锁定时切换回我们的 PWA,一切都会立即恢复正常。此时,用户尝试导航到的页面会立即加载,无需进一步提示,并且应用程序在此之后可以 100% 无缝运行。只有默认页面的初始版本会冻结。
潜在原因
我目前的工作理论是,问题是由以下某些组合引起的:
-
重定向到 Microsoft 登录门户。当用户被发送到 Microsoft 进行身份验证然后被发送回我们的域时,会话/cookie 连续性可能会出现问题。
-
iOS 的独立模式。结合上述情况,使用第三方身份验证并短暂离开 PWA 域是否有可能导致未来页面导航出现问题。没有其他浏览器或设备存在此问题,这一观点得到了支持,而且我的研究表明 Apple 对 PWA 的支持仍处于早期阶段。
-
服务人员失败。我们已经进行了大量测试,以确保在用户首次进入站点时正确安装和注册 Service Worker。我们会检查重新注册软件,以防万一它在页面导航中的任何点被删除。我们确信,在验证有一个活跃的 Service Worker 处理页面 GET 请求后,用户会被重定向回我们的主页。我还测试了在服务工作人员注册期间显式缓存可从我们的主页访问的链接页面,以查看从缓存提供页面是否可以缓解该问题。它没。这是 sw.js 中处理获取请求的代码(取自 Google 的便捷指南):
// "cache-first" approach for requests from client. Will try to get the file from the cache.
// If no match found, it will send the request onto the network. If both fail serve fallback page.
self.addEventListener("fetch", function (event) {
if (event.request.method !== "GET") return;
event.respondWith(
// Try the cache
caches.match(event.request).then(function (response) {
console.log("[service worker] attempting to fetch file from cache...");
return response || fetch(event.request);
}).catch(function () {
// If both fail, show a generic fallback:
return caches.match(offlineFallbackPage);
})
);
});
我已经使用Mac独立远程调试了PWA,并且我已经验证的是,当用户单击链接导航到新页面时触发的单击事件得到了正确处理,因此问题确实出现在加载链接页面本身。除此之外,远程调试已确认在尝试导航到站点上的其他页面时根本不会触发 HTTP GET 错误(或任何其他错误)。
这是我构建的第一个 PWA,对于所有这些东西我还是个新手。所以我很想知道我是否遗漏了任何东西或者我可以从这里去哪里。我搜索了所有论坛,但似乎无法在任何地方找到答案。谢谢!
在我的具体案例中,我遇到了非常相似的问题。但是当重定向到应用程序主页 url 时,我的 pwa(与 PwaBuilder 打包)在 oidc 注销时冻结。
在 XCode 中我观察到一个错误:
could not signal service com.apple.webkit.webcontent 113 could not find specified service
我的身份提供程序重定向回来时没有出现问题,但启动我正在使用的 OIDC 客户端库的以下重定向时出现问题oidc-客户端-ts https://github.com/authts/oidc-client-ts。事实证明有设置窗口位置/URL 的两种可能方法 https://www.w3schools.com/js/js_window_location.asp、分配或设置 href。并且库默认使用分配。更改分配以替换 href 导致我的 iOS PWA 不再冻结。非常具体的用例,但它可能对其他人有帮助......
auth.signoutRedirect({
post_logout_redirect_uri: process.env.BASE_URI,
redirectMethod: "replace",
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)