web-dev-qa-db-ja.com

SFAuthenticationSession / ASWebAuthenticationSessionおよびログアウト

アプリを、SFSafariViewControllerを使用する古いOAuthフローからiOS 11のSFAuthenticationSessionを使用する新しいフローに切り替えることを計画しています。ログインは問題ではありません。新しいAPIへの移行には実装に数分かかりました。しかし、ログアウトすると困惑します。

どうやって?

ドキュメント内のどこからでもログアウトするオプションを提供したいという言及を見つけることができません。古いSFSafariViewControllerを使用してCookieを無効にしますか?いいえ、もうSFAuthenticationSessionと共有されていません。認証セッションを再開するとすぐに、ユーザーは自動的にログインし、抜け道はありません。では、ログアウトを有効にする方法は?または、私は単に完全に明白な何かを見落としていますか?

更新:技術的な意味で「機能する方法」を見つけましたが、それはユーザーにとって不思議です:Cookieをクリアするログアウトページで新しいSFAuthenticationSessionを開きます。ただし、アラートビューをログアウトすると、サービスを介してログインするかどうかをユーザーに再度尋ねます。 yesが選択されている場合(「ログイン」)、Cookieクリアのログアウトページが開き、ユーザーはビューを手動で閉じる必要があります。完了ハンドラーによって、ログインビューを再び開くことができることがわかります。 I 本当にこの解決策が気に入らない。

何か案は?私はまだ完全に明白な解決策を見落としていますか?

更新2:これまでのところ、この問題について誰も手がかりがないため、これはおそらく簡単なものではありません。レポートツールを使用してAppleに提案を提出し、これを処理する方法を明確にするか、利用できない場合はAPIに組み込みます。回答があれば投稿します。

更新3:問題をもう少し熟考した後、別の可能性のある(魅力的ではない)解決策が見つかりましたifOAuthプロバイダー:Cookieの寿命を非常に短くします。その後、自動ログインせずにログインページを開くことができます。ただし、これにより、アプリ間でログインセッションを共有するという目的がすべて失われてしまいます。ログインページに影響を与える必要があります。

更新4:iOS 12 SFAuthenticationSessionは廃止され、ASWebAuthenticationSessionに置き換えられたため。ただし、ASWebAuthenticationSessionはログアウトに関して何も変更しません。それはまだ不可能です。前と同じ問題。

45
JanBrinker

私が遭遇した「最良の」ソリューションの1つは、システムSafari(SFSafariViewControllerではなく)でログアウトページを開くことです。 ASWebAuthenticationSessionはCookieをSafariと確実に共有するため、期限切れ/削除されたCookieもアプリに影響します。

詳細については、 このGitHubページ を参照してください。

1
Martin Winter

どのCookieがログイン情報を保存するかによって異なります。

セッションCookieの場合、 https://developer.Apple.com/documentation/authenticationservices/aswebauthenticationsession に従ってSafariと共有されません。

そのため、ローカルセッションをクリアするだけで、次回のアプリ起動時にCookieがクリアされます。

そうでなく、Cookieが持続する場合、前述のMartinのように、ログアウトURLでSafari(SFSafariViewControllerではなく)を開いてから、アプリにリダイレクトする必要があります。

さらに情報が必要な場合はお知らせください。 3つの認証方法すべて(ASWebAuthenticationSession、Safari、およびSFSafariViewController)で広範囲にテストしました。

0
MNassar