web-dev-qa-db-fra.com

OIDC et PWA (ajouter à l'écran d'accueil)

Mise à jour: Fondamentalement le même problème que autonome PWA rompt la connexion } mais sur iOS.

Si vous ajoutez une application Web à l'écran d'accueil, Chrome sur Android partage le stockage local avec le même domaine dans le navigateur. Vous pouvez tester cela en accédant à https://wilfrem.github.io/add_to_homescreen_test/ puis en ajoutant à l'écran d'accueil et en constatant que vous avez le même identifiant lorsqu'il est ouvert à partir de l'écran d'accueil. (J'ai fait Nexus 5x)

Si vous faites la même chose dans iOS Safari, vous obtenez un nouvel identifiant. (j'ai fait l'iPod iOS 12.1.1)

La bibliothèque oidc-client-js définit une référence de session dans la mémoire de stockage locale, puis la rappelle sur l'appel Web S. Par conséquent, si vous essayez de vous connecter à partir d'une application Web ouverte à partir de l'écran d'accueil sur iOS, le fournisseur (oidc) de Safari est ouvert, puis l'URL de l'application Web est redirigé, mais pas dans l'application Web ouverte à partir de l'écran d'accueil. En raison de la différence de stockage local, vous obtenez:

Aucun état correspondant trouvé dans la mémoire

Comment êtes-vous censé utiliser oidc avec un iOS ouvert à partir de l'application Web de l'écran d'accueil si le stockage local n'est pas partagé sur le même domaine? Ou comment demander à iOS de rouvrir la fenêtre appropriée (celle ouverte depuis l'écran d'accueil) lors de la redirection vers l'application Web? Ou comment faire pour que iOS ne quitte jamais l'application plein écran lors de la navigation vers l'OP (fournisseur oidc) en premier lieu?

modifier:

Voici un récit pour expliquer le problème.

  • ouvrir my.app.com
  • ajouter à l'écran d'accueil
  • ouvrir l'application depuis l'écran d'accueil
  • cliquez sur le bouton de connexion
  • le bouton de connexion appelle UserManager.signinRedirect()
  • UserManager.signinRedirect() appelle OidcClient.createSigninRequest()
  • OidcClient.createSigninRequest() enregistre l'état de connexion dans localstorage et permet d'accéder à my.op.comvoirsur Android my.op.com ouvre un onglet Chrome et sur iOS my.op.com ouvre Safari.
  • processus de connexion complet sur op
  • op redirige vers my.app.com/signin-callback.htmlvoici le problème

Sous Android, my.app.com/signin-callback.html s'ouvre dans l'application ouverte à partir de l'écran d'accueil, sous iOS, il reste dans Safari. Donc vous obtenez:

Aucun état correspondant trouvé dans la mémoire

Je n'ai pas de difficulté avec l'erreur. En fonction de ce qui se passe, l'erreur est tout à fait attendue. Je ne sais tout simplement pas comment amener Safari à se comporter de manière à fonctionner avec la bibliothèque.

Si c'est pertinent c'est mon manifeste.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 a également supprimé scope mais n'a eu aucun changement de comportement.

update: a également essayé de définir le début du domaine complet, pas seulement le / relatif, toujours pas de changement.

5
William Lohan

J'ai déjà expérimenté ce problème et cela m'a aidé. Voir si aide

0
rodolfocop