サービス概要
ADFSをSAML IdPとしてCognitoユーザープールと連携
目的・やりたいこと
Cognitoは、外部IdPと連携してサインインできる。現在ADFSを使用しているため、これをSAML IdPとしてCognitoユーザープールと連携する環境を作成してみました。
対象となる技術
- Cognito
- IdP
条件(導入にあたって前提事項)
・ADFS、AD、Cognitoユーザープールは作成済みとします。ここではそういったものの一から作成を説明しません。既にあるものとして、あくまで連携するのに必要な手順と、連携を検証します。
参考URL
作業の流れ
概要図
事前作業
Cognitoドメインを作成するのに、本物のドメインが必要になるため、自分はお名前.comでnozaki.comを無料で取得しました(1年後などに自動更新されて課金されない要注意。クレカ番号を登録しておかなければ大丈夫だと思います)
検証手順
- Cognitoドメインを作成
[アプリケーションの統合]タブからドメインのアクションで[Cognitoドメインの作成]を選択します。
ここではこのように登録済みの本当のドメインを入れないと進められないので注意
2.ADFSで証明書利用者信頼を追加
-
「要求に対応する」を選択
-
「証明書利用者についてのデータを手動で入力する」を選択
-
表示名は適当(「ad1」としました)
-
発行者、サブジェクト、有効開始日、有効期限などはそのまま「次へ」
-
「SAML 2.0 WebSSO プロトコルのサポートを有効にする」の「証明書利用者SAML 2.0 SSOサービスのURL」にCognitoユーザープールの作成時に作ったCognitoドメインを指定したエンドポイント(https://Cognitoドメイン.auth.ap-northeast-1.amazoncognito.com/saml2/idpresponse)を入力します。ここでは「nozaki.com」ではなく「nozaki」がドメイン部分に入ることに注意
https://nozaki.auth.ap-northeast-1.amazoncognito.com/saml2/idpresponse -
証明書利用者信頼の識別子(urn:amazon:cognito:sp:ユーザープールID)を追加
-
アクセス制御ポリシーは「すべてのユーザーを許可」を選択
- あとはそのまま進めて完了
3.ADFSで要求規則(クレームルール)を2つ作成
-
一つはメールアドレス
-
もう一つは名前ID
4.メタデータの取得
これがURLがよくわからなくて苦労しました。https://AdminPortal_endpoint/FederationMetadata/2007-06/FederationMetadata.xml という形式になるらしいのですが、AdminPortal_endpointのところがよくわからず
結局、ADFSにログインするときに使っているいつものドメイン「adfs1.aws-test-dk.com」を使って、
https://adfs1.aws-test-dk.com/FederationMetadata/2007-06/FederationMetadata.xml
から取得しました。これを入れるとセキュリティの警告が出ますが、押し進めると「FederationMetadata.xml」がダウンロードできます。
5.CognitoユーザープールでSAML IdP設定
-
[サインインエクスペリエンス]タブで「アイデンティティプロバイダーを追加」をクリック
-
SAMLを選択し、プロバイダー名を適当(ここでは「ad1」としました)に入力
-
メタデータドキュメントをアップロードで、先ほどダウンロードした「FederationMetadata.xml」をアップロード
電子メールアドレスのSAML属性には「http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress」を指定
6.アプリクライアントのホストされた UIを設定
-
[アプリケーションの統合]タブからアプリケーションクライアント(ここではexamplecorp_saas_app)を選択
-
ホストされた UI を編集
「許可されているコールバック URL」には適当にAWSのURLを入力しときました。
IDプロバイダーには先ほどの「ad1」を選択
OAuth 2.0許可タイプでハマりました。最初Implicit grant(暗黙的な付与)のみを許可していたところ、ログイン時にどうしても「An error was encountered with the requested page unauthorized_client」に遭遇してログインできなかった。そこで、「認証コード付与」も許可したところ、何事もなかったかのように無事ログインできました。
OIDCスコープはEメールとOpenIDのみ
7.テストADユーザーの作成
最後にADの「Active Directory ユーザーコンピューター」でログイン用のユーザー「ad1」を作成します。
Administratorsグループの追加と、メールアドレス設定を忘れないように
8.実際にアクセス!
ではここでようやくアクセスできます。URLは以下
https://nozaki.auth.ap-northeast-1.amazoncognito.com/login?client_id=64edch5n5jgaaalolmbadessp4&response_type=code&scope=email+openid&redirect_uri=https://aws.amazon.com/jp
するとこのようにユーザーを選択する画面に
「ad1」を選択すると、無事ADFSのログイン画面にリダイレクトされました。
所要時間
1時間
ユースケース
ADFSなどIdPにCognito認証を噛ませたい場合