Auth0 で Azure AD のカスタムクレームを取得するときに気をつけたい
はじめに
ことの始まりは、 Azure AD で SSO するために Auth0 を使おうとした際、 Azure AD のカスタムクレームが取得できないことに気づいたことから始まります。
Azure AD の SSO を Auth0 で実現するには大まかに分けて以下のように 4 つの方法があります。
- Microsoft Azure AD
- OpenID Connect (OIDC)
- SAML2
- WS-FED
今回の要件は SPA の構成のため、 #1 の Microsoft Azure AD か #2 の OpenID Connect (OIDC) を検討しました。
筆者は手始めに Azure AD のロゴが表示されている #1 の Microsoft Azure AD を採用しました。
これは検索で出てくる記事が #1 の Microsoft Azure AD を採用していることが多かったためです。
筆者が検索した際は ClassMethod さんの記事がトップに表示されていました。
ありがたいことに上記の記事通りに設定することで、 SPA との疎通も無事に完了することができます。
これでログイン基盤はもう触ることはないだろうと思っていました。
新たな要望
しばらくすると、 Azure AD のカスタム属性を SPA で表示することができないかと要望が来ました。
具体例を挙げるなら Profile の部署や役職ですね。
Auth0 では Users Management API が提供されているため、 Azure AD の SSO をしたユーザのプロフィールは Auth0 の User Pool で確認することが出来ます。
そこで実際の値を確認したところ、カスタム属性は取得できていませんでした。
取得できているのはユーザの本名、メールアドレス、ユーザ名のみでした。
そこで色々と調査をすると、 Auth0 Action を使って group
を取得できるという記事を見つけました。
そこでカスタム属性を Action の引数から探すことにしました。
しかし、いくら探しても見つかりません。
Action での取得はできないのか?
とも思ったので一度公式ドキュメントに原点回帰することにしました。
これまでざっくり見て理解した気になっていたのですが Note に以下のことが書いていました。
Claims returned from the Azure AD enterprise connection are static; custom or optional claims will not appear in user profiles. If you need to include custom or optional claims in user profiles, use a SAML or OIDC connection instead.
Auth0 デフォルトの Azure AD ではカスタム属性を取得することができないということですね。
代わりに OIDC で設定するようにとのことです。
結論
Azure AD のカスタム属性を SPA ベースで取得するには、 OIDC を使う必要があります。
OIDC の設定手順は以下のコミュニティ記事が参考になります。
実際にこの通りに設定することで、カスタム属性を取得することができました。
同じように困った方の目に留まれば幸いです。
P.S.
まずはドキュメントを読んで全て理解しよう。
FYI
Discussion