Amazon CognitoとGoogle CloudのOAuth 2.0 クライアントを連携させて、Google認証を実装してみた

Amazon CognitoとGoogle CloudのOAuth 2.0 クライアントを連携させて、Google認証を実装してみた

2026.01.07

こんにちは、ゲームソリューション部のsoraです。
今回は、Amazon CognitoとGoogle CloudのOAuth 2.0 クライアントを連携させて、Google認証を実装してみたことについて書いていきます。

構成

今回構築したのは以下の構成です。
Flutterで作ったテストアプリからAmazon CognitoとGoogle CloudのOAuth 2.0 クライアントでGoogle認証をして、Lambdaにアクセスする構成です。

sr-cognito-google-01

テストアプリ側では、Googleで認証ボタンを押すと、Googleのログイン画面に遷移してログインを行います。
Googleログイン後に認証テスト実行ボタンを押すと、API GatewayでJWT Authorizerが動いて、その後にLambdaへアクセスします。

sr-cognito-google-02
sr-cognito-google-03
sr-cognito-google-04
sr-cognito-google-05

Google CloudでのOAuth 2.0 クライアントの作成

Google Cloudのコンソールで、Google Auth Platformのクライアントを選択します。
sr-cognito-google-06

クライアントを作成ボタンを押して、クライアントIDを作成します。

  • アプリケーションの種類:ウェブアプリケーション
  • 承認済みのリダイレクトURIには以下を入力
    • https://{Amazon Cognitoユーザープールのドメイン}.auth.{aws region}.amazoncognito.com/oauth2/idpresponse

sr-cognito-google-07

作成ボタンを押すと、クライアントIDとクライアントシークレットが表示されるためメモしておきます

AWS構築

AWSはTerraformで構築します。
以下Cognito部分のみを抜粋してコメントで説明しています。

## ユーザープールの作成
resource "aws_cognito_user_pool" "main" {
  name = "${var.project}-${var.env}-user-pool"
  auto_verified_attributes = ["email"]
  ## ユーザー属性の定義
  schema {
    name                = "email"
    attribute_data_type = "String"
    required            = true
    mutable             = true
  }
}

## ユーザープールのドメイン設定
resource "aws_cognito_user_pool_domain" "main" {
  domain       = "${var.project}-${var.env}-${var.cognito_domain_suffix}"
  user_pool_id = aws_cognito_user_pool.main.id
}

## ユーザープールのクライアント作成
resource "aws_cognito_user_pool_client" "app" {
  name         = "${var.project}-${var.env}-app-client"
  user_pool_id = aws_cognito_user_pool.main.id

  allowed_oauth_flows_user_pool_client = true
  allowed_oauth_flows                  = ["code"]
  ## 取得できる情報のスコープを設定
  allowed_oauth_scopes                 = ["openid", "email", "profile"]

  ## コールバックURLには、{アプリのスキーム}://oauth/callbackを入力
  callback_urls = var.callback_urls
  ## ログアウトURLには、{アプリのスキーム}://oauth/logoutを入力
  logout_urls   = var.logout_urls

  ## Google IdPが作成されている場合のみ追加
  ## Cognitoの標準認証も併用したい場合は、["COGNITO", "Google"]
  supported_identity_providers = ["Google"]

  explicit_auth_flows = [
    "ALLOW_REFRESH_TOKEN_AUTH",
    "ALLOW_USER_SRP_AUTH"
  ]
  generate_secret = false
}

## Google IdP設定
resource "aws_cognito_identity_provider" "google" {
  user_pool_id  = aws_cognito_user_pool.main.id
  provider_name = "Google"
  ## プロバイダーの種類
  provider_type = "Google"

  provider_details = {
    ## Googleから取得する情報の範囲
    authorize_scopes = "openid email profile"
    ## Google CloudのOAuth 2.0 クライアントIDとクライアントシークレット
    client_id        = var.google_client_id
    client_secret    = var.google_client_secret
  }

  attribute_mapping = {
    email    = "email"
    username = "sub"
  }
}

動作確認

Flutterアプリを起動して、Googleでログインボタンを押すと、Googleのログイン画面に遷移しました。
sr-cognito-google-02
sr-cognito-google-03

Googleのログインを行った後、Google認証済みとなっています。
sr-cognito-google-04

その後に、認証テスト実行ボタンを押すと、成功のメッセージが表示されました。
sr-cognito-google-05

Amazon Cognitoを見てみると、Googleログインしたユーザーが追加されていることがわかります。

sr-cognito-google-08

グループについても、Google用のグループが作成されて、先ほどのユーザーが追加されていることがわかります。

sr-cognito-google-09

最後に

今回は、Amazon CognitoとGoogle CloudのOAuth 2.0 クライアントを連携させて、Google認証を実装してみたことを記事にしました。
どなたかの参考になると幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事