少し調べてみると、Azure Active Directory(AAD) でユーザー管理(プロビジョニング)ができそうだったので試してみた。
Azure AD で OIDC 認証するアプリを作ってみる - Qiita を参考に、以下のような方針としました。
Django 側へログインユーザーを作成するため、AAD との同期(プロビジョニング)を SCIM2 で実施する。 なお、このときマッピングに oid を含める。
oid
Azure App Service 上では request header 経由で認証状況を確認できるので、今回はそれを利用しログインする。
以下のような再利用可能なアプリケーション django-ezaad を作成。
ezaad/login
X-MS-CLIENT-PRINCIPAL-ID
ezaad を作成するにあたり、AAD 固有の注意点として以下のようなものがありました。
SCIM2
PATCH
active
boolen
App Service 認証
/.auth/login/aad
post_login_redirect_url
ezaad/login を開くと AAD のサインイン画面へリダイレクト。
AAD 側で設定していれば MFA、パスワードレス等も適用される。
認証完了後は Django へログインしリダイレクト。
基本的には目的としていた運用が可能なことは確認できました。しかし、以下のような問題もあるため、もう少し対応を考える必要もありそうです。
Azure 非ギャラリーアプリでは SCIM2 資格情報の扱いが実用に適さない