更新:基本上与Standalone PWA breaks login相同,但在iOS上。

如果您将网络应用添加到主屏幕,则Android上的Chrome浏览器会与浏览器中的同一域共享本地存储。您可以通过以下方法进行测试:转到https://wilfrem.github.io/add_to_homescreen_test/,然后添加到主屏幕,并从主屏幕打开时看到具有相同的ID。 (我使用的是Nexus 5x)

如果您在iOS Safari中执行相同的操作,则会获得新的ID。 (我做了iPod iOS 12.1.1)

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



如果本地存储不在同一域中共享,那么应该如何使用oidc和从主屏幕Web应用程序打开的iOS?还是在重定向回Web应用程序时,如何使iOS重新打开正确的窗口(从主屏幕打开的窗口)?还是首先导航到OP(oidc提供程序)时如何使iOS永不离开全屏应用程序?

编辑:

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

  • 打开my.app.com
  • 添加到主屏幕
  • 从主屏幕打开应用程序
  • 单击登录按钮
  • 登录按钮调用 UserManager.signinRedirect()
  • UserManager.signinRedirect()调用 OidcClient.createSigninRequest()
  • OidcClient.createSigninRequest()将登录状态存储在本地存储中,并导航至my.op.com see在android上my.op.com打开Chrome浏览器标签,在iOS上my.op.com打开Safari
  • 在op
  • 上完成登录过程
  • op重定向到my.app.com/signin-callback.html这是
  • 问题

    在android上,my.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"
        }
      ]
    }
    

    添加还删除了scope,但行为没有任何变化。

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

    最佳答案

    我已经遇到了这个问题,对我有帮助。
    看看是否helps!

    关于progressive-web-apps - OIDC和PWA(添加到主屏幕),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53948916/

    10-09 18:12