2017-11-21 9 views
0

PayPalのサインインをAndroidアプリケーションに統合して、クライアントをFirebaseデータベースに認証したいと考えています。私は、クライアントアプリケーションで "signin withcustomtoken"関数を使用するために、提供されたuidからトークンを作成するnode.jsサーバーでカスタム機能を作成しました。トークンを取得するために、https経由でnodeidサーバーにuidを送信する必要がありますか?より良い方法がありますか?Firebase認証用の新しいフェデレーションIDプロバイダを作成する方法

答えて

0

uidを受け入れ、カスタムトークンを返すHTTPエンドポイントを作成しないでください。これは、巨大なセキュリティ上の脆弱性であり、攻撃者はどんなユーザーでも自分のuidを偽装する可能性があるためです。 あなたがする必要があるのは以下の通りです:

  1. paypal OAuth code flowを実装します。そのためにサードパーティのライブラリを使用することができます。
  2. Paypal OAuth認証コードを取得したら、バックエンドに送信し、PaypalクライアントIDと秘密情報を使用してPaypal更新トークンとアクセストークンを交換します。そのペイパルユーザーを含むペイパルユーザーに関連付けられたユーザー情報を取得することができます。その後、Firebase Admin SDKを使用してFirebaseカスタムトークンを作成し、それをクライアントに返します。
  3. クライアントでsignInWithCustomTokenを使用すると、そのカスタムトークンでサインインを完了できます。

この場合、認証コードを取得してFirebaseカスタムトークンを返すHTTPエンドポイントを公開しています。

これは基本的な考え方です(詳細は除外されています)。もちろん、同じデバイス上で何らかの状態を渡すことで、フローの開始と終了を確認してから、最後に戻っているかどうかを確認する必要があります。また、アプリリンクなどのようなものを使用して認証コードが正しいアプリに返されるようにする必要があります.Firebase Dynamic Linksが役立ちます。

+0

セキュリティに関する私の心配だったInfact。 firebaseは私が外部のサーバと直接通信することを許可しないので、私はまずGoogle認証を使うことに決めました。ユーザーに確認済みのPayPalアカウントがあるかどうかを確認するフラグをデータベースに追加し、クライアントアプリケーションでPaypal oauthを完全に実装するように更新します。私はnode64関数を使用して、client64のclientid:secretを返して、クライアント上のppaouthのフローで動作させることができると思います。あなたは良いアイデアだと思いますか?ありがとう – Nullo

+0

いいえもちろんです。クライアントIDまたはシークレットをクライアントに返さないでください。認証コードフローは、バックエンドサーバー上で完了するためのものです。 – bojeil

+0

私はアプリ内のAPIの秘密を難読化し、それがどうなるかを見てみようと思います。私が支払った計画に切り替えたり、自分のサーバーをこの段階でセットアップする必要はありません。 – Nullo

関連する問題