6

更新:与独立 PWA 中断登录的问题基本相同,但在 iOS 上。

如果您将 Web 应用添加到主屏幕,Android 版 Chrome 会与浏览器中的同一域共享本地存储。您可以通过转到https://wilfrem.github.io/add_to_homescreen_test/然后添加到主屏幕并查看从主屏幕打开时是否具有相同的 ID 来测试这一点。(我做了 Nexus 5x)

如果你在 iOS Safari 中做同样的事情,你会得到一个新的 id。(我做了 iPod iOS 12.1.1)

oidc-client-js 库在本地存储中设置会话引用,然后在 Web 应用的登录回调中调用该引用。因此,如果您尝试从 iOS 上从主屏幕打开的 Web 应用程序登录,它会在 Safari 中打开 OP(oidc 提供程序),然后重定向回 Web 应用程序的 url,但在 Safari 中不是从主屏幕打开的 Web 应用程序,因此,由于您获得的本地存储不同:

在存储中找不到匹配的状态

如果本地存储不在同一个域中共享,您应该如何将 oidc 与从主屏幕 Web 应用程序打开的 iOS 一起使用?或者,当重定向回网络应用程序时,如何让 iOS 重新打开正确的窗口(从主屏幕打开的窗口)?或者如何让 iOS 在首先导航到 OP(oidc 提供程序)时永远不会离开全屏应用程序?

编辑:

这里有一个叙述来解释这个问题。

  • 打开my.app.com
  • 添加到主屏幕
  • 从主屏幕打开应用程序
  • 点击登录按钮
  • 登录按钮调用UserManager.signinRedirect()
  • UserManager.signinRedirect()来电OidcClient.createSigninRequest()
  • OidcClient.createSigninRequest()my.op.com 登录状态存储在本地存储中并导航以在 android 上my.op.com打开 Chrome 选项卡并在 iOS 上my.op.com打开 Safari
  • 在操作上完成登录过程
  • op重定向到my.app.com/signin-callback.html 这里是问题

在 androidmy.app.com/signin-callback.html上,在从主屏幕打开的应用程序中打开,在 iOS 上,它停留在 Safari 中。所以你得到:

在存储中找不到匹配的状态

我没有遇到错误,根据正在发生的错误完全可以预料,我只是不知道如何让 Safari 以一种可以与库一起使用的方式运行。

如果它相关,这是我的 manifest.json

{
  "name": "omitted",
  "short_name": "omitted",
  "theme_color": "#omitted",
  "background_color": "#omitted",
  "display": "standalone",
  "scope": "/",
  "start_url": "/",
  "icons": [
    {
      "src": "omitted",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "omitted",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}

add 也被删除scope,但在行为上没有任何变化。

更新:还尝试将 start 设置为完整域,而不仅仅是 relative /,仍然没有变化。

4

1 回答 1

0

我已经遇到过这个问题,它对我有帮助。看看有没有帮助

于 2019-01-08T18:07:35.400 回答