😎

OpenID ConnectでAzure ADをOktaの外部IdPとしてID連携する

2022/02/07に公開

はじめに

以下のドキュメントを参考にOpenID Connect (OIDC) でAzure AD->Okta->Web Appの順にID連携してWeb Appにログインできるようにします。基本的にドキュメントの手順通り実施すれば問題ないですが、一部ハマったポイントがあるので、未来の自分のために備忘録として残しておきます。
https://developer.okta.com/docs/guides/add-an-external-idp/azure/main/
なお、最終的には以下のようなシーケンスになる想定です。
Overview

Azure AD (OP) の設定

ここでは、後ほどOktaに登録する必要がある情報の生成や確認を行っていきます。
まず、「Quickstart: Register an application with the Microsoft identity platform」を参考にアプリケーションの登録を実施します。この時Redirect URIにはhttps://{okta-domain}/oauth2/v1/authorize/callbackを登録しておきます。

アプリケーション登録後に表示されるApplication IDは後にOktaに登録する必要があるのでメモしておきます。
つづいて、アプリケーション選択後の[Certificate & secrets][New Client Secret]からClient Secretを生成します。生成されたClient SecretのValueも後にOktaに登録する必要があるのでメモしておきます。


[Overview][Endpoints]から各種エンドポイントの情報を表示します。この中のOpenID Connect metadata documentに記載されているURLにアクセスします。

OpenID Connect metadata documentにアクセスすると以下のようなデータが表示されます。この中のいくつかの情報を後ほどOktaに登録する必要があります。

ここまでで、Azure AD側の操作は終わりです。
後述しますが、Oktaにユーザーを新規登録するためには、firstNamelastNameemailloginが必要そうでした。
今後、動作確認において意図しない挙動をする際は、Azure AD側のユーザーに上記の属性情報に相当する値が登録されているか併せて確認すると良いかもしれません。

Okta (RP/OP) の設定

主に[Security][Identity Providers]から登録作業を進めていきます。
まず、[Add Identity Provider][Add OpenID Connect IdP]からAzure AD関連の情報を登録していきます。

先ほど登録したAzure ADのアプリケーションと、OpenID Connect metadata documentの情報をもとに以下のようにそれぞれの設定値およびエンドポイント情報を埋めます。

今回はデフォルトのまま進めますが、[Advanced Settings]からユーザーの紐付けに関する詳細な設定が行えるようです。

つづいて、[Routing Rules]からAzure ADにルーティングする条件を指定します。今回はデモなので、全てのユーザーをAzure ADにリダイレクトさせるために以下のように設定します。

最後に、Azure ADが提供する属性情報とOkta側のClaimのマッピングを設定します。Oktaに新規ユーザーを自動で生成しようとすると、firstNamelastNameemailloginが必要そうでした。それぞれの属性について、Azure ADとOktaだと少し違うようだったので以下のようにマッピングを設定しておきます。

Azure ADのClaimの詳細は「Provide optional claims to your app」をみると良さそうでした。

Web App (RP) の設定

今回は以下のサンプルアプリケーションをWeb App (RP) として利用します。
https://github.com/okta/samples-nodejs-express-4/tree/master/okta-hosted-login
このRPに設定が必要な情報を以下のようにOkta側に登録しておきます。

登録方法の詳細については、「Sign users in to your web application」をご覧ください。
また、以下のスライドでも解説しているので必要に応じて併せて参照ください。
https://speakerdeck.com/kg0r0/okta-x-openid-connect-x-fido2?slide=10
なお、ユーザーを新規作成する場合、作成されたユーザーが自動で対象のアプリケーションにアサインされるように設定していない場合、途中でエラーが返ってきてしまう点に注意してください。
今回はデモなので、とりあえず[Group][Everyone]がこのアプリケーションにアサインされるように設定しました。

動作確認

サンプルアプリケーションを起動し、[Log In]を押下します。

すると、Okta > Azure ADの順でリダイレクトされ、Azure ADのユーザーとしてログインが要求されます。

Azure AD側でログインが成功するとOkta > Web Appの順でリダイレクトされ、以下の画面が表示され、Web Appにログインできたことが確認できます。

また、OktaのユーザーにAzure AD側のユーザーが新規に作成されていることも確認できます。

おわりに

IdPの外部IdP連携は比較的珍しくない機能ですが、実際にやるとハマりポイントがいくつかあり、手順を残しておくといざという時に便利だと思いました。

参考

GitHubで編集を提案

Discussion