問題タブ [sfauthenticationsession]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - SFAuthenticationSession プロンプトを表示する前に、利用可能な Cookie があるかどうかを知る方法はありますか
iOS 11 で、Apple は Web とモバイル アプリの間で認証データを共有する新しい方法を導入しましたSFAuthenticationSession
。
SFAuthenticationSession
すべての新規ユーザー (私の Web サイトを使用したことがない可能性があります) にプロンプトを表示して同意してもらい、その後何も得られずにログインするように求めるのは、ユーザー エクスペリエンスとしては不適切です。
Apple側のドキュメントはかなり空っぽです。これは私が見つけた唯一の例です。
プロンプトを表示する前に利用可能な Cookie があるかどうかを知る方法はありますか? SFAuthenticationSession
または、Associated Domains
有効にすると、ドメインで認証するときに、システムがプロンプトを表示しないようにする必要がありますか?
ios - SFAuthenticationSession/ASWebAuthenticationSession とログアウト
SFSafariViewController
を使用した古い OAuth フローからiOS 11 の を使用した新しいフローにアプリを切り替える予定ですSFAuthenticationSession
。ログインは問題ではありません。新しい API への移行を実装するのに数分かかりました。ただし、ログアウトすると困惑します。
どのように?
ドキュメントのどこにでもログアウトのオプションを提供したいという言及は見つかりません。古いものを使用しSFSafariViewController
て Cookie を無効にしますか? いいえ、それらは と共有されなくなりましたSFAuthenticationSession
。認証セッションを再開するとすぐに、ユーザーは自動的にログインし、抜け出せなくなります。では、ログアウトを有効にする方法は? それとも、完全に明らかな何かを見落としているだけですか?
更新: 技術的な意味で「機能する方法」を見つけましたが、ユーザーにとってはばかげています: Cookie をクリアするログアウト ページで新しい SFAuthenticationSession を開きます。ただし、これは、アラート ビューをログアウトするときに、ユーザーがサービス経由でログインするかどうかを再度尋ねることを意味します。「はい」が選択されている場合(「ログイン」)、Cookie クリア ログアウト ページが開かれ、ユーザーはビューを手動で閉じる必要があります。これは完了ハンドラーによってキャッチされる可能性があり、ログイン ビューを再度開くことができることがわかります。ログアウトするためのログインプロンプト?私は本当にこの解決策が好きではありません。
何か案は?私はまだ完全に明白な解決策を見落としていますか?
更新 2: これまでのところ、この問題について何の手がかりも得られていないため、これはおそらく簡単なことではありません。私は Apple のレポート ツールを介して提案を提出し、これを処理する方法を明確にするか、利用できない場合は API に組み込むようにしました。回答が得られたら投稿します。
更新 3: この問題をもう少し検討した結果、OAuth プロバイダーのログイン ページに影響を与えることができる場合、別の (魅力的ではありませんが) 解決策が見つかりました。それは、Cookie の寿命を非常に短くすることです。その後、自動ログインなしでログインページを開くことができます。ただし、これにより、アプリ間でログインセッションを共有するという目的全体が失われます..ログインページに影響を与えることができる必要があります.
更新 4: iOS 12SFAuthenticationSession
は廃止され、 に置き換えられたためASWebAuthenticationSession
。ただしASWebAuthenticationSession
、ログアウトに関しては何も変更しません。それはまだ不可能です。前と同じ問題。
oauth - リダイレクトする iOS 11 AppAuth 処理リダイレクト URI
iOS アプリ、特に iOS 11 で Google OAuth 認証にAppAuth (v 0.90.0)を使用すると、次のようになります。
- リダイレクト URI を使用して、iOS クライアントで Google 認証を開始します
http://myproduct.com/oauth-redirect
。クライアント ID は Web アプリケーションの ID であるため、カスタム URL を指定できません。 - AppAuth がクライアントで SFAuthenticationSession を開始すると、サインインを許可するよう求められます。[続行] を選択します。( https://github.com/openid/AppAuth-iOS/blob/0.90.0/Source/iOS/OIDAuthorizationUICoordinatorIOS.m#L91-L95 )
http://myproduct.com/oauth-redirect
はカスタム URLmyproduct://auth
にリダイレクトし、SFAuthenticationSession 完了ブロックは のコールバック URL で実行されますmyproduct://auth
。- AppAuth が認証フローを再開すると、元の URL が前のステップのコールバック URL と同じかどうかがチェックされます: https://github.com/openid/AppAuth-iOS/blob/0.90.0/Source/OIDAuthorizationService.m #L108-L110
http://myproduct.com/oauth-redirect
とが違うのでmyproduct://auth
、流れが止まります。
サーバー側でトークン交換を実行できるように、Web アプリの clientID を使用していることに注意してください。
resumeAuthorizationFlowWithURL
以前の AppAuth バージョンでは、更新された URL で直接呼び出すことができたので、これが可能でした。
AppAuth を更新せずにこのユース ケースをサポートする方法はありますか?