web-dev-qa-db-fra.com

SFAuthenticationSession/ASWebAuthenticationSession et déconnexion

Je prévois de basculer une application de l'ancien flux OAuth avec SFSafariViewController vers le nouveau flux avec iOS 11 SFAuthenticationSession. La connexion n'est pas un problème, le transfert vers la nouvelle API m'a pris quelques minutes à mettre en œuvre. Cependant, la déconnexion m'a laissé perplexe.

Comment?

Je ne trouve aucune mention de vouloir offrir la possibilité de se déconnecter n'importe où dans la documentation. Utiliser l'ancienne SFSafariViewController pour invalider les cookies? Non, ils ne sont plus partagés avec SFAuthenticationSession. Dès que je relance la session d'authentification, l'utilisateur se connecte automatiquement et il n'y a aucune issue. Alors, comment activer la déconnexion? Ou suis-je simplement en train de négliger quelque chose de complètement évident?

Mise à jour: J'ai trouvé un "moyen qui fonctionne" sur le plan technique, mais qui est dingue pour l'utilisateur: ouvrez une nouvelle SFAuthenticationSession sur la page de déconnexion qui efface le cookie. Mais cela signifie que lors de la déconnexion, la vue des alertes demande à nouveau à l'utilisateur s'il souhaite se connecter via le service. Si yes est sélectionné ("connexion"), la page de déconnexion d'effacement des cookies s'ouvre, l'utilisateur doit alors fermer manuellement la vue, qui peut être interceptée par le gestionnaire d'achèvement et nous savons que nous pouvons rouvrir la vue de connexion. .. affichage de l'identifiant Invite à se déconnecter? Je vraiment n'aime pas cette solution.

Des idées? Suis-je encore en train de négliger une solution tout à fait évidente?

Mise à jour 2: Comme personne n’a encore la moindre idée de ce problème, ce n’est probablement pas une tâche facile. J'ai formulé une suggestion à Apple via son outil de génération de rapports afin de clarifier la procédure à suivre ou de l'intégrer à l'API, le cas échéant. Publierai si je reçois une réponse.

Mise à jour 3: Après avoir réfléchi un peu plus au problème, nous avons trouvé une autre solution possible (bien que peu attrayante) si vous pouvez influencer la page de connexion du fournisseur OAuth: créez des cookies de très courte durée. Ensuite, la page de connexion peut être ouverte sans connexion automatique. Cependant, cela annule tout le but du partage des sessions de connexion entre les applications .. et vous devez pouvoir influencer la page de connexion.

Mise à jour 4: Depuis iOS 12, SFAuthenticationSession est obsolète et a été remplacé par ASWebAuthenticationSession. Cependant, ASWebAuthenticationSession ne change rien à la déconnexion. Ce n'est toujours pas possible. Même problème qu'avant.

34
JanBrinker

C'est une chose qui nous agace aussi. Pourquoi n'y a-t-il pas de méthode telle que "effacer tous les cookies" sur la session? Cela résoudrait complètement ce problème. Et cela resterait également en sécurité, car vous ne pourriez pas accéder aux cookies eux-mêmes.

Pousser cela et espérer qu’une solution sera fournie par Apple à cet effet.

@Affiches ci-dessous ASWebAuthenticationSession n'est pas un remplaçant, c'est plutôt un changement de nom de SFAuthenticationSession. Je ne vois aucune raison pour laquelle Apple ne fournirait pas une méthode ClearSession ou ClearCookies pour nous. ASWebAuthenticationSession ou SFAuthenticationSession sont totalement inutiles, sauf s'ils ajoutent un flux de travail permettant de se déconnecter d'une session existante.

5
user987698

Lorsque vous vous déconnectez à l'aide de SFAuthenticationSession, vous n'obtenez pas de gestionnaire d'achèvement. Vous n'obtiendrez que le gestionnaire d'annulation de l'achèvement, qui est identique pour l'alerte d'autorisation et le bouton d'annulation dans Authentication View Controller.

0
canister_exister

L'une des «meilleures» solutions que j'ai rencontrées consiste à ouvrir une page de déconnexion dans le système Safari (et non une SFSafariViewController). Étant donné que ASWebAuthenticationSession partage les cookies de manière fiable avec Safari, le cookie expiré/supprimé affecte également l'application.

Voir cette page GitHub pour plus de détails.

0
Martin Winter