私は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)を使用して検証されている可能性があると考えました。 私は何が欠けていますか?
クライアントシークレットは、Googleからの追加データへのアクセスをバックエンドサーバーからリクエストする場合にのみ使用されます。ユーザーの連絡先、予定表、ドライブのデータへのオフラインアクセス。シークレットは、クライアントアプリケーションから認証コードを交換して、アクセストークンが認証されたデータを取得するためにサーバーによって使用されます。あなたのケースでは、IDトークン(署名されたJWT)に含まれている基本的なユーザーデータをサーバーに渡して、ユーザーの身元を確認するだけです。サーバーから認証済みのGoogleリソースにアクセスする必要がない場合は、アクセストークンは必要なく、その秘密が必要ありません。 –
ここでは、認証専用のユースケースについて説明するブログ記事があります: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 –