2016-05-24 12 views
5

私は音声チャット用のAndroidアプリを作成しており、バックエンドサーバーで簡単なユーザー認証を行うためにGoogle Sign-Inを使用することに決めました。しかし、私はバックエンドでアプリケーションを認証する方法を理解していません。ユーザーが自分のGoogleアカウントを使用してサインインしてIDトークンを受け取ると、IDトークンをサーバーに送信してから、サーバーがIDトークンを検証します。そしてそれは何ですか?ユーザーがボイスメッセージを送受信するときに、アプリケーションがサーバーとの間でメッセージをアップロード/ダウンロードする必要がある場合など、次の要求を認証する方法はありますか?サーバーはどのユーザーがリクエストを行っているかを知る必要がありますが、IDトークンは間もなく期限切れとなり、その整合性検証は複雑で比較的長いプロセスであるため不適切です。あなたが必要とする説明がでているようGoogle Sign-Inバックエンドサーバー認証

+0

こんにちはサリバン、あなたは決してこの状況の解決策やアプローチを見つけましたか? – rastadrian

+0

私はUtsav Dusadの答えが最も適切だと思います。 – Salivan

+0

idTokenの値を含むAuthorizationヘッダーを含むすべての結果の要求は、もしそうなら、idTokenがJWTであるとすれば、おそらくAuthorization:Bearer {idToken}? – rastadrian

答えて

5

GoogleはサインインAPI:次の手順が関与している:

  • のiOS/Androidアプリケーションを使用して、Googleユーザーがサインインを。
  • クライアント(iOS/Androidアプリ)にtokenid(その他の追加情報についてはlinkを参照)が返されます。
  • クライアントはトークンIDをバックエンドサーバーに送信します。
  • サーバーは、GoogleクライアントAPIを使用します(またはGETリクエストによってGoogleエンドポイントを呼び出すが、関連するネットワーク遅延があることに注意してください)。トークンの整合性を確認します。このステップでは、一定の基準を満たす必要があります。 Hereを参照してください。
  • GoogleAPIはサーバーに情報を返します。どのような情報ですか?このような 何か:

{u'picture ': U' https://lh3.googleusercontent.com/-RD4yn7rqIc8/AAAAAAAAAAI/AAAAAAAALQI/9Ab_kR3_CII/s96-c/photo.jpg ' u'sub ':u'10270538098780639-55'、u'family_name ':u'Dusad'、U' 「iss」: u 'https://accounts.google.com'、u'email_verified ':True、u'name': u'Utsav Dusad '、u'at_hash':u'BMjN0mWeomqVVBhjW_W9A '、u'given_name': u'Utsav '、u 'exp':1484582338、u'azp ': u'85959433390-npk1ss7juimjqt5hrlhm7v2fj2u7593f.apps.googleusercontent.com'、 u'iat ':1484578738、u'locale':u'en-GB '、u'email': u'[email protected] '、u'aud': u'85959433390-npk1ss7juimjqt5hrlhm7v2fj2u7593f.apps.googleusercontent.com '}

サブ:件名。ユーザーID。プライマリキーとしてメールIDを使用しないでください。ユーザーIDを使用します。

ユーザーの識別子。すべてのGoogleアカウントで一意であり、決して が再利用されません。 Googleアカウントには異なる時点で複数のメールがある可能性があります。 ですが、サブ値は決して変更されません。あなたの アプリケーション内のsubを、ユーザーの一意の識別子キーとして使用します。

詳細な情報についてはhereを参照してください。

  • Serverは、クライアントに成功ログインを返します。
  • クライアントはtokenIDを使用して後続(HTTP POST、GET)リクエストを行います。
  • サーバーは、idtokenと「サブ」情報(サブはユーザーの一意のID)を確認することによってデータを提供します。
1

に見えます: https://developers.google.com/identity/sign-in/web/backend-auth#verify-the-integrity-of-the-id-token

それは説明する:

を使用すると、HTTPS POSTでIDトークンを受け取った後、あなたがトークンの 整合性を確認する必要があります。トークンが有効であることを確認するには、次の条件が満たされていることを確認してください。

IDトークンは、適切な Google公開鍵(JWKまたはPEM形式)で正しく署名されたJWTです。 IDトークンのaud の値は、アプリのクライアントIDの1つと同じです。このチェック は、 が使用されている悪意のあるアプリに対して発行されたIDトークンがアプリのバックエンドサーバー上の同じユーザーに関するデータにアクセスしないようにするために必要です。 IDトークンの のissの値は、accounts.google.comまたは https://accounts.google.comと同じです。 IDトークンの有効期限(exp)には、 が渡されていません。認証リクエストでホストされているドメインが指定されている場合、 IDトークンには、Google Appsでホストされている ドメインと一致するリクエストがあります。

それは述べている:

むしろ、私達は強くあなたの プラットフォームは、Google APIクライアントライブラリを使用して、または当社のtokeninfo検証エンドポイントを呼び出すことをお勧めします をこれらの検証手順を実行するために独自のコードを書くより。

これは、あなたが行う必要があることを正確に示しています。

+1

私の質問には絶対に答えません。だから私は毎回IDトークンを送る必要がありますか?それはばかげているので。 :) – Salivan

+1

トークンの検証方法を示しただけで、トークンを検証した後に要求に続く認証を与える方法を尋ねました。 – Salivan

+1

さて、あなたが探しているのは、ユーザーのセッションを監視していると思います(関連トピック:https://developers.google.com/identity/sign-in/web/session-state)。ユーザーが認証されると、セッション「信頼できる」ことができます。 – raddevus