はじめに
こんにちは、Identity チームのすかんくです。
今回は Azure AD 上で日本語を扱いたくない具体的なケースを2つほど、ご紹介したいと思います。
本記事では、過去の経験に基づく具体例を掲示することを目的としており、各社 IdP における日本語の扱いを否定するものではございません。
ケース① Azure AD Join 時の問題
Azure AD では、Windows 端末の管理方法として Azure AD Join と呼ばれる方式がサポートされています。
この Azure AD Join と日本語の組み合わせが、問題となるケースがあるのでご紹介させていただきます。
users フォルダが Azure AD の DisplayName を参照している
Azure AD Join では、Azure AD への参加作業を実施したタイミングでユーザープロファイルが作成されるのですが、これには Azure AD Join を実施したユーザーの Display Name が利用されます。
つまり、Azure AD ユーザーの Display Name が日本語名の場合、C:\Users 配下に作成されるフォルダも日本語名となるわけです。
これがどのような影響を与えるかというと、例えば海外製アプリのインストールやアンインストール、アップデート等に失敗するというケースを確認しています。
主な原因としては非 ASCII コードの扱いがサポートされていないなどが挙げられるかと思います。
対応策:Azure AD ユーザーのプロパティを更新する
Azure AD ユーザーの Display Name を変更いただき、再登録していただくのが一番確実な回避策になります。
クラウドユーザーの場合
Azure AD 上で作成されたユーザーの場合、GUI での変更が可能です。
ユーザー数が多く作業を自動化されたい場合は、PowerShell の Set-AzureADUSer コマンドレットや Graph API でも変更が可能です。
以下に PowerShell でのサンプルを記載します。
$userCsv = Import-Csv "UPNとDisplayNameが記載されたcsvファイルのパス" foreach($userCsv in $user){ Set-AzureADUser -ObjectID $user.UPN -DisplayName $user.newDisplayName }
サンプルでは英語に変換された Display Name が記載された csv ファイルが必要となるため、Azure AD 以外の ID ソースを準備する必要がある点にご注意ください。
同期ユーザーの場合
なお、Azure AD Connect 等により Azure AD 上に同期されたユーザーの場合、オンプレミス AD 上の Display Name 等を変更いただく必要があります。
この場合、オンプレ基盤上のアプリケーションに対しても影響が出る可能性があるため、変更前の基盤精査は欠かさず実施いただければと思います。
ケース② SaaS への SSO に失敗する
続いて、ユーザープロパティが日本語の場合に、SaaS での SSO に失敗するケースについてご紹介します。
具体的なサービス例を挙げると、Google Workspace を Azure AD から SSO する場合などです。
SAML Assertion に非 ASCII コードが含まれる
Azure AD ユーザーの氏名情報が SSO 先のサービスプリンシパルに対して日本語で受け渡された際、SSO でエラーとなるケースが存在します。
具体的には、SAML Assertion に非 ASCII な文字コードが含まれた場合、サービスプリンシパル側が文字列を解釈できずにエラーを返す動作に起因しています。
以下の画像は Google Workspace に対して DisplayName が日本語のユーザーで SSO を試みた際のレスポンスです。DispnayName の Value が文字化けしてします。
対応策:クレームをカスタマイズする
前提
まずは根本的な解決方法について、ご検討いただくのが良いかと思います。
Azure AD Join のケースでも紹介した通り Azure AD ユーザーのプロパティを変更いただく方法です。
ただ、Azure AD の変更作業には時間が掛かってしまう等、各社での事情がある中で SSO だけは早く使いたいという場合については、以下の代替案をご検討いただけますと幸いです。
代替案① 要求から特定クレームを除外する
代替案については、追加の要求クレームから日本語を扱っているクレームを削除する方法が考えられます。
代替案② 特定クレームに対して偽の値を挿入する
もしくは以下画像の通り、displayName/givenName/surName 等の日本語を扱っているプロパティに対して “dummy” という値を静的に指定してあげることで、サービスプリンシパル側が解釈可能な状態となり、SSO を正常に完了させることも可能です。
なお、本代替案を用いることで実際に事象の解消が可能かについてや、各 SaaS の特性や SSO 構成時の要件によって適切な方策は異なりますので、各社環境にて動作確認を実施いただければと思います。
まとめ
今回は Azure AD で日本語を扱いたくない理由について、Azure AD Join と SSO という具体例をご紹介させていただきました。
紹介したケースに限らず、「テナント上のユーザーやグループ、アプリケーションに対しての操作を自動化する場合」等、どの IdP を使っているかに関わらず、文字コードが入り乱れることによる弊害は多いのかなと思います。
改めまして、本記事は IdP での日本語扱いを否定するものではありません。
ただ IdP にて日本語扱いが本当に必要についてを検討されるきっかけになればと思い、執筆させていただきました。
次回はパスワードレスをテーマに何か書ければと考えています。ではまた!!