はじめに
Webアプリケーションでは、特定のドメインのメールアドレスを持つユーザーのみにアクセスを制限したいケースが多くあります。本記事では、Amplify Gen2を使用して、ドメインを制限したGoogleログインの実装方法について解説します。
目次
- 実装の概要
- 認証設定の基本構成
- ドメイン制限の実装
- 環境変数の設定
- 動作確認方法
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,
},
})
ここでのポイント:
-
clientId
とclientSecret
は環境変数として管理 -
scopes
でemail
を指定して、メールアドレスを取得 -
callbackUrls
とlogoutUrls
には適切な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. 動作確認方法
実装後の動作確認ポイント
- 許可されたドメインのメールアドレスでログインできることを確認
- 許可されていないドメインではエラーが表示されることを確認
- Googleログインのフローが正常に機能することを確認
まとめ
Amplify Gen2を使用することで、以下のような特徴を持つドメイン制限付きGoogleログインを実装できます。
- 特定ドメインのユーザーのみにアクセスを制限
- 環境変数による柔軟な設定管理
- Pre Sign-upトリガーによる確実な制御
この実装により、セキュリティ要件に応じたユーザー認証を実現できます。
参考リンク