1

私はSPA js + nodejsアプリのGoogle Singinをテストしています。 私はこれを追加しました:なぜGoogle Oauth verifyIdToken(javascript nodejsバージョン)はクライアント秘密を使用しないのですか?

<script src="https://apis.google.com/js/platform.js" async defer></script> 

及びこれら:

<meta name="google-signin-client_id" content="YOUR_CLIENT_ID.apps.googleusercontent.com"> 
<div class="g-signin2" data-onsuccess="onSignIn"></div> 

をHTML5/JSクライアント側で。 このガイド以下:

https://developers.google.com/identity/sign-in/web/sign-in

ユーザーは、ライブラリは、トークンを取得して認証し、ここで説明したように、それをサーバに渡します

サーバー側で

https://developers.google.com/identity/sign-in/web/backend-auth

(nodejsを)トークンこの機能を使用して確認されます:

client.verifyIdToken(
    token, 
    CLIENT_ID, 
    // Or, if multiple clients access the backend: 
    //[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3], 
    function(e, login) { 
     var payload = login.getPayload(); 
     var userid = payload['sub']; 
     // If request specified a G Suite domain: 
     //var domain = payload['hd']; 
    }); 

私の質問: client_secretは使用されていますか? CLIENT_IDフロントエンドを使用してGoogleから認証トークンを取得したので、CLIENT_IDサーバー側をトークン検証に使用しました。私は、トークンを取得している誰もそのユーザーを認証できないように、トークンがサーバーサイドだけで知られているclient_secret(つまりSECRET)を使用して検証されている可能性があると考えました。 私は何が欠けていますか?

+1

クライアントシークレットは、Googleからの追加データへのアクセスをバックエンドサーバーからリクエストする場合にのみ使用されます。ユーザーの連絡先、予定表、ドライブのデータへのオフラインアクセス。シークレットは、クライアントアプリケーションから認証コードを交換して、アクセストークンが認証されたデータを取得するためにサーバーによって使用されます。あなたのケースでは、IDトークン(署名されたJWT)に含まれている基本的なユーザーデータをサーバーに渡して、ユーザーの身元を確認するだけです。サーバーから認証済みのGoogleリソースにアクセスする必要がない場合は、アクセストークンは必要なく、その秘密が必要ありません。 –

+0

ここでは、認証専用のユースケースについて説明するブログ記事があります:https://android-developers.googleblog.com/2016/01/using-google-sign-in-with-your-server.htmlとAPIアクセスの承認使用例:https://android-developers.googleblog.com/2016/02/using-credentials-between-your-server.html –

答えて

1

作成したクライアントはパブリッククライアントで、クライアントシークレットはプライベートクライアントで使用されているようです。

編集:Confidential clientの代わりにprivate clientという用語を使用して申し訳ありません。 は、基本的に我々はのOAuth2で

  1. 公開クライアントのクライアントの2種類があります - これらはクライアントの秘密を必要としないクライアントです。

  2. プライベートクライアント: - これらのクライアントにはクライアント秘密があります。

私は、あなたが私の前に、これらの特定のライブラリで働いていないとして、あなたのクライアントの秘密を見ることがない理由についての非常に特定の答えを与えることはできませんが あなたが持っていたことができることを私には思えます秘密のものの代わりに公開クライアントが作成されました。

+0

今、私は本当に混乱しています... apublicの間のgoogleAuthの違いは何ですかプライベートクライアント? 次のガイドでは、公開クライアントまたはプライベートクライアントについては説明しません。 https://developers.google.com/identity/sign-in/web/sign-in – user1658162

関連する問題