学習帳

Windows,Linux,Mac,AWS,VMware,ネットワークなどの検証

OktaとAmazon CognitoをSAMLで連携させる【2025年版】

はじめに

外部IdPとAmazon CognitoをSAMLで連携させてみます。

参考動画はこちら How to add Okta as a SAML Identity Provider in AWS Cognito?

また参考Webはこちら。OktaとAWS Cognito連携 ~SAML編~
内容はこの通りの「やってみた記事」ですが、OktaもAmazon Cognitoも画面デザインが変わっているので読み替えが大変でした。
大変参考になりました。ありがとうございます。

Amazon Cognito設定①

ユーザープールを作成

AWS マネージドコンソール > Amazon Cognito > ユーザープール > ユーザープールを作成
※テストに使用したユーザープールがあるのでマスクしてあります。

ユーザ―プールを作成

アプリケーションタイプ:シングルページアプリケーション(SPA)
※ 「従来のウェブアプリケーション」で作成されるクライアントシークレットがあると動作しないかも?
アプリケーションに名前を付ける:userpool-SAML(※お好きな名前をどうぞ)

アプリケーションに名前を付ける

サインイン識別子のオプション:☑ユーザー名
サインアップのための必須属性:email (識別子にユーザー名を選ぶときは、emailの選択は必須とのこと)
リターンURL:https://jwt.io (認証成功後、Oktaから返されたトークンの内容を調べられるサイトにリダイレクトさせます)
->ページ下の「ユーザーディレクトリを作成する」ボタンをクリック

オプションを設定

ページ下の「概要に移動」ボタンをクリック

アプリケーションとユーザ―プールの作成成功

ユーザープールの名前変更

「概要」ページが開くと、ユーザープール名が「User pool - (ランダム)」になっているので、修正します。
「名前変更」をクリック

名前変更

ユーザ―プール名を変更

セルフサービスのサインアップ >自己登録を無効化

左側の機能一覧から、
認証 > サインアップ > セルフサービスのサインアップ > 編集 ボタンをクリック

セルフサービスのサインアップ

□自己登録を有効化 ※チェックを外す
変更を保存 ボタンをクリック

セルフサービスのサインアップ 自己登録を有効化のチェックを外す

Oktaの設定

Oktaアカウント登録

okta Developerでアカウントを登録します。
Gmailなどのフリーメールで新しいアカウントを登録しようとすると、ビジネス用メールアドレスで登録するようメッセージが表示されました。
私はGitHub認証で登録しましたが、Googleアカウント認証や、登録するなら会社のメールアドレスで登録するのが良いでしょう。

okta developer アカウント登録

MFAの登録などが必要になるので、進めてください。

ユーザー登録

SAML認証を行うユーザーを登録します。
ディレクトリ > ユーザー > ユーザーを追加 ボタンをクリックします。

SAML認証するユーザーを追加

ユーザー情報を入力して「保存」ボタンを押します。

ユーザー登録

ユーザーが登録されました。

ユーザー登録成功

このあと作成するアプリに登録するユーザーには管理者が必要とのことなので、今作成したユーザーを管理者にします。
※管理者ロールが無くても動作することもあり、本当に必要かは追加検証の必要あり

作成したユーザー名をクリック > 管理者ロール(タブ) > 個人の管理者権限を追加

管理者ロール

「ロール」から「Organization管理者」を選択して、「変更を保存」をクリックします。
※テストなので強めの権限を当てています。

Organization管理者の割り当て

アプリ統合を作成

左側のリストから、アプリケーション > アプリケーション > アプリ統合を作成 ボタンをクリックします。

アプリ統合を作成

SAML 2.0 にチェックを入れ、「次へ」ボタンをクリックします。

SAML 2.0 を選択

アプリ登録

  • アプリ名:okta-sso-saml (※お好きな名前を入力)

    アプリ名設定

  • シングルサインオンURL:
    CognitoがOktaからの認証レスポンスを受け取るためのURL。Cognitoがユーザープール毎に用意してくれている。下記URLの書式で指定する。
    自分のCognitoドメイン/saml2/idpresponse

例:
https://ap-northeast-1hnn2w28xx.auth.ap-northeast-1.amazoncognito.com/saml2/idpresponse

※Cognitoドメインは、Cognitoのマネジメントコンソール「ブランディングドメイン」から確認します。

Conitoドメイン

  • オーディエンスURI
    urn:amazon:cognito:sp:ユーザープール ID
例:
urn:amazon:cognito:sp:ap-northeast-1_hNn2W28xx

※ユーザープールIDは、Cognitoのマネジメントコンソール「概要」にて確認します。

Cognito ユーザ―プール ID

「シングルサインインURL]と「オーディエンスURI」を入力した画面はこちら

シングルサインオンURLとオーディエンスURL

  • 属性ステートメント(オプション)
    OktaからCognitoに引き渡すユーザー属性を設定します。 (下記は一例) 「値」はプルダウンに表示されるものは選択し、表示されないものは手入力します。
    設定後「次へ」をボタンをクリックします。
Name Value
firstname user.firstName
lastname user.lastName
displayname user.displayName
nickname user.nickName
email user.email

※Name: OktaとCognitoで共通に認識するキー
Value: Oktaのユーザー情報に含まれる値

属性ステートメント(オプション)

  • フィートバック
    Oktaのアンケートのようなので、下記にチェックを入れます(どちらでもよさそう)
    SAMLを有効にするには、ベンダーに問い合わせる必要があります
    チェック後、画面下の「終了」ボタンをクリックします。

フィードバック

ユーザーをアサイ

SAML認証を行うユーザーをアサインします。
アプリケーション > okta-sso-saml > 割り当て(タブ) > 割り当て ボタン > ユーザーに割り当て をクリック

ユーザーに割り当て

SAML認証を行いたいユーザーの右側の「割り当て」をクリックします。

ユーザーに割り当てる

ユーザー名(メールアドレス)を確認して、「保存して戻る」をクリックします。

ユーザーに割り当てる

ユーザーが「割り当て済み」になっているのを確認して、「完了」をクリックします。

ユーザー割り当て完了

メタデータを取得

Oktaの登録情報(メタデータ)を取得して、Cognitoにアップロードします。
サインオン タブをクリックし、画面下の「SAML名証明書」を表示します。
ステータスが「アクティブ」になっている方の「アクション」をクリックし、「IdPメタデータを表示」をクリックします。

サインオン タブを選択
IdPメタデータを表示

ブラウザの別タブでXMLが表示されるので、ローカルPCに保存します。
ファイル名は「metadata.xml」などにします。

メタデータ

Amazon Cognito設定②

Amazon Cognitoのマネージメントコンソールを開きます。
左側のリストから、認証 > ソーシャルプロバイダーと外部プロバイダー > アイデンティティプロバイダーを追加 ボタンをクリックします。

アイデンティティプロバイダーを追加

  • SAML を選択します。

    SAMLを選択

  • プロバイダー名:okta-saml (お好きな名前を入力してください)

  • 識別子 - オプション:okta-saml (お好きな名前を入力してください)

    プロバイダー名と識別子

  • メタデータドキュメント:「ファイルを選択」ボタンをクリックして、先ほど保存したXMLファイルをアップロードします。

    メタデータドキュメント(XMLファイル)のアップロード

  • SAMLプロバイダーとユーザ―プールの間で属性をマッピング Oktaの「属性ステートメント(オプション)」で設定したユーザー属性とのマッピングを設定します。

ユーザ―プール属性:プルダウンから選択
SAML属性:Oktaの「属性ステートメント」の「値」で設定した値を入力。
入力がすんだら「アイデンティティプロバイダーを追加」ボタンをクリックします。

ユーザープール属性 SAML属性
email email
given_name firstname
family_name lastname
name displayname
nickname nickname

ユーザー属性マッピング

アプリケーションクライアント の設定

左側の機能一覧から、アプリケーション > アプリケーションクライアント > userpool-SAML をクリック

アプリケーションクライアント

  • ログインページ タブをクリック

    ログインページ タブ

  • 編集 ボタンをクリック

    編集

  • IDプロバイダー:
    ☑ okta-saml (チェックを入れます)
    □ Cognitoユーザ―プール (チェックを外します)

    IDプロバイダー

  • OAuth 2.0許可タイプ
    ☑ 暗黙的な付与 (チェックを入れます)
    □ 認証コード付与 (チェックを外します)

    OAuth 2.0 許可タイプ

  • OpenID Connect のスコープ
    OpenID のみチェックを付け、他のチェックを外します。

    OpenID Connect のスコープ

  • 上記3か所の設定を確認し、「変更を保存」ボタンをクリックします。

    変更を保存

ログインページを開く

「ログインページを表示」をクリックします。

ログインページを表示

サインインページが表示されるのでクリックします。

サインインページ

Oktaのサインインページが表示されるので、Oktaに設定したユーザー名とパスワードを入力して「サインイン」ボタンをクリックします。

Oktaサインイン

認証が行われ、jwt.io にリダイレクトされます。

jwt.io

おわり

実は最後のサインインページを表示する際にエラーになり、3回ほど環境を作り直しています。
結局なにがエラーの原因だったのかはよくわからず(ブラウザやCognito、Oktaのキャッシュのせい?)。
検証はFirefoxなどの別のブラウザやシークレットモードを使用することが大事だったのではないかと思っています。