背景
社内でAzureAD(今はEntraID?)と連携したアプリケーションが複数あり、新しくアプリケーションを作るたびにAzureAD Appを作らなければならなかった。それぞれのアプリケーションで許可されるユーザーが同じものが多かったため統合したかった。
前提
- 筆者は認証周りに疎く調べながらやったため、BestPracticeではない(と思う)
- Cognitoの利用経験あり
- 導入先のWebアプリケーションもCognitoによる認証を導入することとする。
※OIDCとして提供できるのでCognito以外のFrameworkやServiceでも利用可能(だと思う)
図解
統合プロバイダーのCognito設定
AWS Consoleが英語表示なのは、公式Docを基本enで見るため
まずはAzureADとのSAML連携をする必要がある。
そこはインターネッツにたくさん資料が転がっているので自力で頑張ろう。
では、OIDC提供準備に入る。
Cognito App clientを作成
「App integration」 → 「App client list」 → 「Create app client」
App client
- Client secret
- Generate a client secretを選択
Hosted UI settings
- Allowed callback URLs
- 提供先のcallbackURLを入れる
- 今回は提供先もCognitoを使う前提のため
https://{AppClientName}.auth.{region}.amazoncognito.com/oauth2/idpresponse
を入れる - 適当に入れておいて後から編集でも問題なし
- Identity providers
- 連携しておいたAzureADを選択
他はお好みでok
今回は
OAuth 2.0 grant types
をAuthorization code grant
のみ
OpenID Connect scopes
をOpenID
のみ
にしてみた。
Attribute permissionsも利用属性などに合わせてお好みで。
さて、完成したところでOIDCで必要な情報をメモ
- Client ID
- Client secret
- User pool ID
提供先の認証
今回はCognitoで簡単に準備してみる。
ユーザープールを作るところまでは、何でもOKなので公式ドキュメント通りに。
大切なのは、OIDC連携の紐づけから。
「Sign-in experience」 → 「Federated identity provider sign-in」 → 「Add identity provider」
- Client ID
- さっきメモしたClient ID
- Client secret
- さっきメモしたClient secret
- Retrieve OIDC endpoints > Setup method
- Auto fill through issuer URL
- issuer URL
- さっきメモしたUser pool IDを使って
https://cognito-idp.{region}.amazonaws.com/{UserPoolID}
- さっきメモしたUser pool IDを使って
必要に応じて、このCognito AppのApp client name
を使ったcallbackURLを統合プロバイダー側のCognitoに設定する。
https://{AppClientName}.auth.{region}.amazoncognito.com/oauth2/idpresponse
こっちのCognitoのHosted UI > Allowed callback URLsにはテスト用に
https://www.google.com
とか入れておけば、「View Hosted UI」で検証できる。
ログインに成功すると、アプリケーション利用想定のCognitoのUsersにAzureAD認証を通ってきたUserが追加されている。
まとめ
「cognito as oidc provider」と検索をかけてもCognitoにOIDC連携を登録するドキュメントや海外の古い記事が出てきたため実際にやってみました。
まだ検証レベルなので細かい設定ができているか不安ではありますが実際にアプリケーションとの連携をしてみてさらなる検証を進めてみます。