やったこと
SSOに触れたことがなくざっくりと仕組みを理解したかったので、Cognitoのマネージドログインページ画面からMicrosoft Entra ID(旧Azure AD)でSSOしました。
シーケンス図
ログイン後、Cognitoのユーザープールにユーザが追加されていることや属性マッピングができていることを確認するところまで実施しています。
AzureとAWSとでそれぞれ設定が必要ですが、数分あればできるので思ったよりも簡単でした。
以下では、設定手順を記載していきます。
Cognitoの作成(AWS)
Cognitoのユーザープールを作成しましょう。
今回はCDKで作成したので詳細は省きますが、アプリケーションクライアントの作成ができればとりあえずなんでもいいと思います。
アプリケーションの作成(Azure)
エンタープライズ アプリケーションから新しいアプリケーションを作成します。
[+ 新しいアプリケーション]から[+ 独自のアプリケーションの作成]を選択して「ギャラリーに見つからないその他のアプリケーションを統合します (ギャラリー以外)」を選択して作成します。
SSO設定(Azure)
アプリ設定画面からSSOの設定をしていきます。実施する内容は主に2点です。
- 識別子の追加
- 応答 URLの追加
- SAML証明書の取得(Cognito側の設定で使います)
[シングル サインオン]から[SAML]を選択して、遷移先のセットアップ画面で基本的なSAML構成を編集していきます。
以下のフォーマットに従って追加します。
識別子の追加
urn:amazon:cognito:sp:<UserPoolID>
応答 URLの追加
https://<Cognitoドメイン>/saml2/idpresponse
最後にSAML証明書(フェデレーション メタデータ XML)をダウンロードします。
ユーザーの追加(Azure)
ログインするためのユーザを追加しておきます。
アイデンティティプロバイダーを追加(AWS)
Cognitoのユーザープール画面の[ソーシャルプロバイダーと外部プロバイダー]からアイデンティティプロバイダーを追加します。フェデレーティッドサインインのオプションはSAMLを選択し、先ほどダウンロードしたXMLファイルをメタデータドキュメントにアップロードします。SAML プロバイダーとユーザープールの間で属性をマッピングの欄にはhttp://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
を入力します。これを入力することでメールアドレスのマッピングが可能になります。
動作確認
アプリケーションクライアントから作成しておいたクライアントを選択してマネージドログインページの設定のプロバイダー部分を先ほど作成したアイデンティティプロバイダーに修正してログインページに遷移します。
無事にサインイン画面に到達しました。
Cognitoのユーザを確認したところ追加されていました。
ハマったところ
ダミーで作成したユーザにメールアドレスを設定するのを忘れていてエラーがでたぐらいです。
error_description=Invalid+SAML+response+received%3A+Invalid+user+attributes%3A+emails%3A+The+attribute+emails+is+required+&error=server_error
参考