ウェブの [Google でログイン] ボタン

ウェブの [Google でログイン] ボタン

この Codelab について

subject最終更新: 4月 28, 2025
account_circle作成者: Brian Daugherty

1. 概要

この Codelab では、ユーザーがログインするためのシンプルなウェブページを作成します。[Google Identity Services] JavaScript ライブラリを使用して、[Google でログイン] ボタンを表示およびカスタマイズします。

[Google でログイン] ボタン。

  • ウェブページに「Google でログイン」ボタンを追加する方法
  • OAuth 2.0 ウェブ アプリケーションをセットアップする方法
  • ID トークンをデコードする方法
  • 「Google でログイン」ボタンをカスタマイズする方法
  1. テキスト エディタとウェブページをホストする場所、この Codelab では以下の環境について説明します。
    • マシンのターミナルでローカルに実行している場合
    • Glitch などのプラットフォームを使用します。
    最も使いやすい環境を選択してください。
  2. Google Cloud プロジェクト 既存のプロジェクトを使用することも、新しいプロジェクトを作成することもできます。Google Cloud Platform のアカウントとプロジェクトは無料です。
  3. HTML、CSS、JavaScript、Chrome DevTools(または同等のツール)に関する基本的な知識。

では始めましょう。

2. ログインページを作成する

このコードサンプルを index.html という名前のファイルに追加します。テストは、お好みのテキスト エディタを使ってマシンで行うことも、Glitch のようなプラットフォームで行うこともできます。

<!DOCTYPE html>
<html lang="en">
  <head>
    <script src="https://accounts.google.com/gsi/client" async></script>

    <script>
      function decodeJWT(token) {

        let base64Url = token.split(".")[1];
        let base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");
        let jsonPayload = decodeURIComponent(
          atob(base64)
            .split("")
            .map(function (c) {
              return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
            })
            .join("")
        );
        return JSON.parse(jsonPayload);
      }

      function handleCredentialResponse(response) {

        console.log("Encoded JWT ID token: " + response.credential);

        const responsePayload = decodeJWT(response.credential);

        console.log("Decoded JWT ID token fields:");
        console.log("  Full Name: " + responsePayload.name);
        console.log("  Given Name: " + responsePayload.given_name);
        console.log("  Family Name: " + responsePayload.family_name);
        console.log("  Unique ID: " + responsePayload.sub);
        console.log("  Profile image URL: " + responsePayload.picture);
        console.log("  Email: " + responsePayload.email);
      }
    </script>
  </head>
  <body>
    <!-- g_id_onload contains Google Identity Services settings -->
    <div
      id="g_id_onload"
      data-auto_prompt="false"
      data-callback="handleCredentialResponse"
      data-client_id="PUT_YOUR_WEB_CLIENT_ID_HERE"
    ></div>
    <!-- g_id_signin places the button on a page and supports customization -->
    <div class="g_id_signin"></div>
  </body>
</html>

このコードは HTML と JavaScript が混在しており、次のような処理を行います。

  • この Google Identity Services ライブラリを g_id_onload で構成する
  • g_id_signin を使用して [Google でログイン] ボタンを表示する
  • handleCredentialResponse という JavaScript コールバック関数ハンドラを追加し、Google からユーザーのログイン認証情報を受け取ります。
  • decodeJWT 関数。JSON Web Token(JWT)認証情報を単純な JSON に変換します。

data-client_id="PUT_YOUR_WEB_CLIENT_ID_HERE" の設定が少し違うようです。

後で見直すので、無視してください。

3. ウェブページを配信する

ここでは、ブラウザに index.html を提供する 2 つの環境について説明します。

  • ウェブサーバーをマシン上でローカルに
  • リモートプラットフォームから利用できます

最も使いやすいものを選択してください。設定したら、URL を使用して OAuth ウェブ クライアントを構成します。

マシンからローカル

Python3 がシステムにインストールされていることを確認します。設定は OS とプラットフォームによって異なります。マシンに Python をインストールする必要がある場合は、Python の設定と使用方法から始めてください。

index.html を含むディレクトリで Python ウェブサーバーを起動します。

$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

ウェブサーバーがポート 8000 で接続をリッスンし、ログインページを提供する準備が整いました。URL は

http://localhost:8000

リモート プラットフォームの使用

Glitch(または同等のもの)を使用してログインページを編集しホストしている場合は、プレビュー ペインまたは新しいブラウザタブで index.html を開くことができます。

通常、使用する URL は、glich.com プロジェクトのセットアップ時に入力したプロジェクト名です。たとえば、Glitch プロジェクトの名前が「gis-example」の場合、URL は「https://gis-example.glitch.me」になります。もちろん、選択したプロジェクト名は再利用できません。URL は

https://<var>your-project-name</var>.glitch.me

ページを読み込む

お待ちください...

まず、OAuth 2.0 ウェブ クライアントを作成して構成する必要があります。

次のステップで使用するため、URL をコピーするかメモしておきます。

4. OAuth ウェブ クライアントを設定する

ユーザーが実際にログインできるように OAuth を構成します。

  • OAuth 2.0 ウェブ クライアントを作成するには、このリンクをクリックします。必要に応じて、ウィザードで新しい Google Cloud プロジェクトを作成および設定できます。
  • [アプリケーションの種類] プルダウンから [ウェブ アプリケーション] を選択します。
  • [承認済みの JavaScript 生成元] で [URI を追加] ボタンをクリックします。
  • ステップ 3 ウェブページを配信するindex.html をホストしている URL を入力します。

    ローカルマシンでホストされる

    マシンでホストされているローカル送信元

    リモート プラットフォームでホストされている

    リモート ホスティング プラットフォームの使用
  • [作成] をクリックします。
  • 新しいクライアント ID をコピーします。

ASMRの要素も忘れてはならないでしょう

新しいクライアント ID を使用するには、前に戻って index.html を更新する必要があります。エディタで、PUT_YOUR_WEB_CLIENT_ID_HERE を新しいクライアント ID に置き換えます。クライアント ID は 1234567890-abc123def456.apps.googleusercontent.com のようになります。

ログインしましょう

5. ログイン

まず、ブラウザのデベロッパー コンソールを開きます。すべてのエラーと、Google から返された JWT ID トークンの認証情報がこのログに記録されます。

[Google でログイン] ボタンを押します。

これ以降の処理は若干異なる場合があります。

  • 現在複数の Google アカウントにログインしている場合は、このウェブアプリへのログインに使用するアカウントを選択するよう求められます。
  • このウェブアプリに初めてログインする場合は、同意を求めるメッセージが表示されます。

必要に応じてアカウントを選択して同意した後、Google は JWT で応答します。ブラウザで実行されている handleCredentialResponse コールバック関数が JWT を受け取ります。

この Codelab では、JWT の内容をデコードして出力します。本番環境のウェブアプリで、デコードされた JWT を検証して使用し、バックエンド プラットフォームでの新しいアカウントを作成したり、ユーザーの新しいセッションを確立したりするなど、より意味のある処理を行います。

6. JWT ID トークンを検査する

エンコードされた JWT がデベロッパー コンソールに記録されます。JWT のデコード後、よく使用される ID トークン フィールドのいくつかもコンソールに記録されます。

jwt.io などのオンライン ツールを使用して JWT をデコードできます。

ターミナルの jq を使用して JWT をデコードして表示することもできます(場合によっては、jq のインストールにパッケージ マネージャーを使用する必要があります)。まず、エンコードされた JWT 文字列を二重引用符で囲みます。

$ JWT="eyJhbGciOiJSUzI1Ni ... Hecz6Wm4Q"

このコマンドを使用して

$ echo $JWT | jq -R 'split(".") | .[0],.[1] | @base64d | fromjson'
{
  "alg": "RS256",
  "kid": "c7e04465649ffa606557650c7e65f0a87ae00fe8",
  "typ": "JWT"
}
{
  "iss": "https://accounts.google.com",
  "azp": "123456789012-s0meRand0mStR1nG.apps.googleusercontent.com",
  "aud": "123456789012-s0meRand0mStR1nG.apps.googleusercontent.com",
  "sub": "2718281828459045",
  "email": "example@example.com",
  "email_verified": true,
  "nbf": 1744645148,
  "name": "Brian Daugherty",
  "picture": "https://lh3.googleusercontent.com/a/08a898b88ca4d6407be652d8",
  "given_name": "Brian",
  "family_name": "Daugherty",
  "iat": 1744645448,
  "exp": 1744649048,
  "jti": "52cd32984b30e178aa88bc2e75e63e055a461fcf"
}

メールアドレス、名前、写真などの一部のキーと値は、かなりわかりやすいものにする必要があります。他の値は、JWT を使用する前に検証に使用されます。各フィールドの意味については、ID トークンからユーザー情報を取得するをご覧ください。

7. ボタンをカスタマイズする

デフォルトのログインボタンをページに配置する手順は次のとおりです。

    <div class="g_id_signin"></div>

このボタンは

[Google でログイン] ボタン。

しかし、サイトのテーマに合わせて色、サイズ、テキストを変更したい場合もあるでしょう。

ボタンの色を青色に変更し、[Google で登録] に変更します。

index.html を開き、g_id_signin 要素を見つけて、data-theme="filled_blue" 属性と data-text="signup_with" 属性を追加します。

    <div
     
class="g_id_signin"
     
data-theme="filled_blue"
     
data-text="signup_with"
   
></div>

ページを保存して再読み込みすると、新しいテキストを含む青いボタンが表示されます。

[Google で登録] ボタン。

ボタンをさらにカスタマイズできます。オプションの完全なリストについては、ビジュアル データ属性をご覧ください。

8. 参考情報

お疲れさまでした

ウェブページへの [Google でログイン] ボタンの追加、OAuth 2.0 ウェブ クライアントの構成、JWT ID トークンのデコードを行い、ボタンの外観をカスタマイズする方法を学びました。

次のステップについては、次のリンクを参考にしてください。

よくある質問