ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

Cognitoの外部IdPとしてAzureADを使う

クラウドインテグレーション事業部 山口です。

マネージドなIDプロバイダーとして利用できるCognitoですが、外部IDプロバイダーとして連携する機能があります。 Office365などを利用してる環境でAzureADを利用しているケースなど、AzureADに登録されているユーザ情報をもとに認証認可の制御を行うことが可能です。

難しいステップはなく連携できますので簡単な手順をメモ代わりに書いていきます。

AzureADの作業

AzureADにアプリケーション登録を行う

アプリ登録後、プラットフォーム構成からリダイレクトURLを入力します。 下記例はAmazon Cognitoドメイン名をベースとしたURLですが、所有ドメインを使う事も可能です。

https://Amazon Cognito ドメイン.auth.ap-northeast-1.amazoncognito.com/oauth2/idpresponse

f:id:kinunori:20200709223027p:plain

クライアントシークレットを発行する

Cognitoからリクエストを受けつけるためのクライアントシークレットを生成します。 メモを忘れるとあとで見直すことはできないので注意です。

f:id:kinunori:20200709212207p:plain

Cognitoユーザプールの作業

IDプロバイダー(外部フェデレーテッド ID プロバイダ)を設定する

下記を参考に入力します。

クライアントID:  AzureADのアプリ登録内の概要にある「アプリケーション (クライアント) ID」を転記
クライアントシークレット: AzureADのアプリ登録時に生成したクライアントシークレットを転記
属性のリクエストメソッド: POST
承認スコープ: 任意(profile openid など)
発行者:https://login.microsoftonline.com/<AzureADのアプリ登録内の概要にある「ディレクトリ (テナント) ID」>/v2.0

検出の実行をクリックして、「openid 設定エンドポイントを正常に取得しました。」が出力されたら保存をしましょう。

f:id:kinunori:20200709215249p:plain

アプリクライアントを作成

アプリクライアントを作成します。 アプリクライアントIDはCognitoへ認証リクエストを行う時など必要になります。

f:id:kinunori:20200709220434p:plain

アプリクライアントの設定

下記の図を参考に必要情報を入力します。 コールバックURLは、AzureADのアプリ登録時に入力したものと同じにします。 異なっていた場合、エラーになるので注意。

サインアウトURLは下記を入力します。 サインアウトURLの入力は任意ですが、入力する場合はAzureADのアプリ登録よりプラットフォーム構成内にあるログアウトURLにも同じ内容が入力されている必要があります。

https://login.microsoftonline.com/<AzureADのアプリ登録内の概要にある「ディレクトリ (テナント) ID」>/oauth2/v2.0/logout?post_logout_redirect_uri=<ログアウト後にリダイレクトしたいURLをURLエンコードで記載>

f:id:kinunori:20200709220619p:plain

属性マッピングの設定

AzureADのidトークンに含まれる情報をCognitoユーザプールの任意の属性にマッピングすることが可能です。 動作する上で必須ではありませんが、必要な場合はCognitoユーザプールで扱う情報をもとに設定します。

Webアプリケーションの設定

ここではWebアプリケーションの解説は割愛しますが、Webアプリケーションは意識せずに、 Cognitoユーザプールドメインの /oauth2/authorizeエンドポイントに認証リクエストを行います。 認証リクエストを行うと、Microsoftアカウントのログイン画面へリダイレクトされます。

f:id:kinunori:20200709222320p:plain

ログインが成功したユーザはCognitoユーザプール内にユーザが追加されてますので、AzureADには存在しないカスタム属性を追加したり、アプリケーション特性にあったユーザプールとして利用することができます。