SSO 設定の追加方法
概要
顧客が SSO(Single Sign-On)を契約した際に、ユーザーが SSO 機能を利用できるようにするために必要な設定手順を説明します。この手順は、顧客の Identity Provider (IdP) を AWS Cognito と連携させ、アプリケーションで SSO ログインを有効化するためのものです。
前提条件
- AWS Cognito User Pool への管理者アクセス権限
- App Config への編集権限
- 顧客から提供される IdP の設定情報(Microsoft Entra ID、Google Workspace など)
- 対象環境(dev、staging、production)の確認
手順
1. Cognito 上で IdP の追加
AWS Cognito コンソールにアクセス
- 対象の User Pool を選択
- 左メニューから「認証>ソーシャルプロバイダーと外部プロバイダー」を選択
Identity Provider の追加
- プロバイダータイプを選択(例:SAML、OIDC)
- プロバイダー名を設定(例:
MicrosoftEntra-ZipunkTest) - 識別子は顧客のドメイン名を使用(例:
zipunk.onmicrosoft.com) - メタデータは顧客から提供されるファイルをアップロード
SP が開始する SAML アサーションが必要を選択- 署名などは希望があれば設定する
※ custom:useremail ではなく、custom:idp-email を使用することに注意してください。 
- 属性マッピングの設定
custom:idp-emailfamily_namegiven_name
2. Cognito クライアントの作成
以下の設定でアプリケーションクライアントを作成します。

基本設定
- アプリケーションクライアント名:
quden-prod-[顧客名]-sso-client - 認証フローセッションの持続期間: 3分
- 更新トークンの有効期限: 365日
- アクセストークンの有効期限: 60分
- IDトークンの有効期限: 1日
- アプリケーションクライアント名:
認証フロー設定
- 「サーバー側の管理者認証情報」を選択
- 高度な認証設定で「ユーザー存在エラーの防止を有効化」
Redirect URL の設定
texthttps://app.quden.io https://app.quden.io/signin/sso/callback追加した IdP の紐づけ
- 「Identity providers」タブで先ほど作成した IdP を選択
スコープ
openidemailprofile
3. App Config 内での Feature Flags 設定
App Config の設定ファイルに以下の JSON を追加します:
json
{
"IS_SSO_AVAILABLE": {
"enabled": true,
"configMap": {
"[顧客のドメイン]": {
"clientId": "<cognito-client-id>",
"clientSecret": "<cognito-client-secret>",
"idpIdentifier": "[顧客のドメイン]",
"userPoolDomain": "auth.[環境].quden.io",
"logoutRedirectUri": "https://app.[環境].quden.io/signin",
"providerName": "MicrosoftEntra-[顧客名]"
}
}
}
}設定項目の説明
clientId: Cognito クライアントの IDclientSecret: Cognito クライアントのシークレットidpIdentifier: 顧客のドメイン(例:zipunk.onmicrosoft.com)userPoolDomain: 認証用のドメインlogoutRedirectUri: ログアウト後のリダイレクト先providerName: Cognito で設定した IdP の名前
4. 設定の検証
Cognito 設定の確認
- Test authentication で IdP との接続をテスト
- 属性マッピングが正しく設定されているかを確認
アプリケーションでのテスト
- SSO ログインボタンが表示されることを確認
- 実際のログインフローをテスト
- ユーザー情報が正しく取得されることを確認
設定例
Microsoft Entra ID の場合
json
{
"IS_SSO_AVAILABLE": {
"enabled": true,
"configMap": {
"example.onmicrosoft.com": {
"clientId": "2ia3nmuse73rklu6porec9j6bd",
"clientSecret": "xxxxxxxxxxxxxxxxxxxxx",
"idpIdentifier": "example.onmicrosoft.com",
"userPoolDomain": "auth.dev.quden.io",
"logoutRedirectUri": "https://app.dev.quden.io/signin",
"providerName": "MicrosoftEntra-ExampleCorp"
}
}
}
}トラブルシューティング
よくある問題と解決方法
認証が失敗する
- IdP の設定情報(メタデータURL、証明書など)を再確認
- 属性マッピングが正しく設定されているかを確認
- Cognito のログを確認
リダイレクトURLエラー
- Cognito クライアントの Redirect URL 設定を確認
- IdP 側の Redirect URL 設定も確認
ユーザー情報が取得できない
- 属性マッピングの設定を確認
- IdP から送信される属性名を確認
App Config の設定が反映されない
- JSON の構文エラーがないかを確認
- デプロイが正常に完了しているかを確認
- キャッシュのクリアが必要な場合があります
セキュリティ考慮事項
- Client Secret は安全に管理し、定期的にローテーション
- 最小権限の原則に従い、必要最小限のスコープのみを設定
- ログイン試行回数の制限を設定
- 定期的なアクセスログの監査
関連リンク
SP Metadata
xml
<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
validUntil="2025-07-19T09:50:35Z"
cacheDuration="PT604800S"
entityID="urn:amazon:cognito:sp:ap-northeast-1_tR0nnRpLX">
<md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Location="https://auth.quden.io/saml2/idpresponse"
index="1" />
</md:SPSSODescriptor>
<md:Organization>
<md:OrganizationName xml:lang="en-US">Quden</md:OrganizationName>
<md:OrganizationDisplayName xml:lang="en-US">Quden</md:OrganizationDisplayName>
<md:OrganizationURL xml:lang="en-US">https://quden.io</md:OrganizationURL>
</md:Organization>
<md:ContactPerson contactType="support">
<md:GivenName>Quden Customer Support</md:GivenName>
<md:EmailAddress>support@quden.io</md:EmailAddress>
</md:ContactPerson>
</md:EntityDescriptor>