2017-09-13 6 views
2

私が現在構築しているFlutterアプリでは、カスタム(Google以外のユーザー/ Facebook/Twitter /など)認証サーバーに対してユーザーを認証する必要があります。Oauth2のフローティングアプリ

これを達成するには、ユーザーはWebページで資格情報を記入する必要があります。この目的のために、WebView-pluginを使用することができる。ただし、ユーザーが認証された後にページがリダイレクトされると、WebViewが閉じられ、WebViewを最初に呼び出した(Flutter)関数にコードが渡されます。

は、すでにいくつかの研究を行ったので、私は、次のオプションaccrossに来た:

  • This blog postはまだ手動で私の意見では(真の解決策ではないウィンドウを閉じるには、ユーザーが必要となるローカルサーバを使用しています)。
  • This issueは、すべてのOAuthプロバイダとの統合をマークしますが、ブラウザ内のユーザ認証に関する詳細は提供しません。
  • This issueは、私が記述しているのとまったく同じですが、WebViewプラグインがWebViewを閉じる方法を提供していると言われています。実際にはclose() -functionがありますが、私はredirect-URIでそれを起動し、検証コードを返す方法を見つけることができません。

redirect-URIが開かれたときにブラウザを自動的に終了するソリューションが存在します(また、確認コードも返されます)。

ありがとうございます!

答えて

2

私はこれを試していませんが、FlutterWebviewPluginを使用して、https://www.facebook.com/v2.8/dialog/oauth?client_id={app-id}&redirect_uri=fbAPP_ID://authorizeのようなURLにユーザを送信することを考えています。 application:openURL:options:(iOS)とonNewIntent(Android)のネイティブハンドラーを追加し、とInfo.plistを変更してfbAPP_IDスキームのURLを受け取るようにアプリを登録します。プラットフォームチャネルを使用して、ディープリンクパラメータをDart-landに戻し、ダーツサイドのwebviewでclose()と呼ぶことができます。

+0

これは私たちがやったことですが、セキュリティ上の理由からWebブラウザではなくネイティブブラウザでURLランチャーを使用しました。たとえば、AndroidManifest.xmlはURLをURIデータをチェックしたアクティビティにリンクし、チャネルを使用して送信してから、それを閉じます。ありがとう! –

+0

@RickdeVriesどのようなセキュリティ上の理由? AFAIK外部のブラウザは、非公式のクライアント(つまり、authとクライアント/アプリは同じエンティティによって所有されていない(コードレビューされていない))のためのベストプラクティスです。 – straya