5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Webアプリケーションでは、特定のドメインのメールアドレスを持つユーザーのみにアクセスを制限したいケースが多くあります。本記事では、Amplify Gen2を使用して、ドメインを制限したGoogleログインの実装方法について解説します。

目次

  1. 実装の概要
  2. 認証設定の基本構成
  3. ドメイン制限の実装
  4. 環境変数の設定
  5. 動作確認方法

1. 実装の概要

Amplify Gen2では、GoogleログインとPre Sign-upトリガーを組み合わせることで、特定のドメインのメールアドレスを持つユーザーのみにアクセスを制限することができます。

2. 認証設定の基本構成

まず、auth/resource.tsでGoogleログインの基本設定を行います。

amplify/auth/resource.ts
import { defineAuth, secret } from '@aws-amplify/backend'
import { preSignUp } from './pre-sign-up/resource'

export const auth = defineAuth({
  loginWith: {
    email: true,
    externalProviders: {
      google: {
        clientId: secret('GOOGLE_CLIENT_ID'),
        clientSecret: secret('GOOGLE_CLIENT_SECRET'),
        scopes: ['email'],
        attributeMapping: {
          email: 'email',
        },
      },
      callbackUrls: ['http://localhost:3000/', 'https://your-domain.amplifyapp.com/'],
      logoutUrls: ['http://localhost:3000/', 'https://your-domain.amplifyapp.com/'],
    },
  },
  triggers: {
    preSignUp,
  },
})

ここでのポイント:

  • clientIdclientSecretは環境変数として管理
  • scopesemailを指定して、メールアドレスを取得
  • callbackUrlslogoutUrlsには適切なURLを設定

3. ドメイン制限の実装

pre-sign-up/handler.tsでドメイン制限のロジックを実装します:

amplify/auth/pre-sign-up/handler.ts
import { env } from '$amplify/env/pre-sign-up'
import type { PreSignUpTriggerHandler } from 'aws-lambda'

export const handler: PreSignUpTriggerHandler = async (event) => {
  const email = event.request.userAttributes['email']

  if (
    !email.endsWith(env.ALLOW_DOMAIN_1) &&
    !email.endsWith(env.ALLOW_DOMAIN_2)
  ) {
    throw new Error('Invalid email domain')
  }

  return event
}

このハンドラーは:

  • ユーザーのメールアドレスを取得
  • 許可されたドメインかチェック
  • 許可されていない場合はエラーをスロー

4. 環境変数の設定

pre-sign-up/resource.tsで環境変数を定義します:

amplify/auth/pre-sign-up/resource.ts
import { defineFunction } from '@aws-amplify/backend'

export const preSignUp = defineFunction({
  name: 'pre-sign-up',
  environment: {
    ALLOW_DOMAIN_1: 'example.com',
    ALLOW_DOMAIN_2: 'example.co.jp',
  },
})
  • 許可するドメインを環境変数として定義
  • 複数のドメインを設定可能

5. 動作確認方法

実装後の動作確認ポイント

  1. 許可されたドメインのメールアドレスでログインできることを確認
  2. 許可されていないドメインではエラーが表示されることを確認
  3. Googleログインのフローが正常に機能することを確認

まとめ

Amplify Gen2を使用することで、以下のような特徴を持つドメイン制限付きGoogleログインを実装できます。

  • 特定ドメインのユーザーのみにアクセスを制限
  • 環境変数による柔軟な設定管理
  • Pre Sign-upトリガーによる確実な制御

この実装により、セキュリティ要件に応じたユーザー認証を実現できます。

参考リンク

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?