web-dev-qa-db-ja.com

APIサーバーに接続されたモバイルアプリからのソーシャル認証

PassportJS を使用するNode.jsサーバーがあり、Google、Facebook、Twitterを介したソーシャルログインを使用しています。

Node.jsサーバーは、PassportJSミドルウェアを使用してルートを認証し、データを安全に提供するAPIをホストします。 APIは、ユーザーがGoogle、Facebook、Twitterを介して「ログイン」し、続いて私のサービスで自分のアカウントを作成するiOSアプリケーションを提供するために存在します。

それぞれの会社のモバイルSDKがクライアントの間の直接通信用である場合、どうすればこれを達成できますかサーバー?私は本質的に私のクライアント私のサーバーと通信する方法を望んでいますサーバーと通信します。全体的な考え方も間違っているかどうか教えてください。

3
Carpetfizz

それらのプロセスは次々に起こりませんか?ユーザーとして私にとって理にかなっているワークフローは次のとおりです。

  1. Facebookアカウントを使用してWebサービスにログインします。これにより、私の電子メールアドレスとFacebookユーザーIDが提供されます。
  2. 次に、Webサービスから、(たとえば)Pocketを使用してモバイルAPIを使用することを承認するように求められます。通常、これには http://getpocket.com のURLに私を送信する必要があります。これにより、Webサービスに私のPocketアカウントに対する特定の権限を付与することを確認するように求められます。確認すると、Webサービスにリダイレクトされ、Webサービスがアカウントへのアクセスに使用できるアクセストークンが渡されます。次に、このトークンをクライアントまたはサーバーにローカルに保存できます。どちらの場合も、サービスを使用する前にyourサービスにログインする必要があることを確認してくださいmyアクセストークン。my資格情報を使用してモバイルAPIにアクセスします。
  3. これで、Pocketアカウントからのアクセスを取り消すまで、Webサービスはアクセストークンを使用してPocketに対してAPIリクエストを行うことができます。

使用するモバイルAPIが(Pocketのように)認証を提供する場合、認証と許可の取得を同時に実行できる可能性があります。 PassportJSを使用したことはありませんが、scopeオプションを使用すると、特定のサービスを介してログインするときにアクセス許可を要求できるようです。これを行う場合、取得するユーザープロファイルオブジェクトには、さらにFacebookリクエストを行うために使用できるアクセストークンが含まれていると思います。

このアクセストークンがクライアントに保存されているかサーバーに保存されているかは、ユーザーに代わってAPIリクエストを行うときにサーバーに渡される限り、違いはありません。

3
Gaurav