はじめに
こんにちは、年始は加賀温泉で過ごした Identity チームのすかんくです。
今回はよくあるお問い合わせシリーズとして、Okta に関する内容をお届けしたいと思います。
お問い合わせ内容
Oktaユーザ名を「user-A」から「user-B」に更新したのですが、アプリケーション側のSAMLで使うユーザ名に変更が反映されません。

発生条件
以下の両方に当てはまるケースでは、ユーザー属性を更新してもアプリケーション側の SAML 連携に用いる NameID(Okta上では “Application username format/アプリケーションユーザーの形式” と表示)の値は自動更新されません。
- プロビジョングを構成(または対応)していないアプリケーションの場合
- Application username formatでカスタム式を利用していない場合
- 設定箇所:アプリケーション画面の [サインオン/認証] タブ > [アプリケーションユーザー名の形式]

Okta ドキュメント通りに SSO を設定していると [条件 2.] にマッチしやすいため、注意が必要です。
NameIDとはユーザー識別子のことを指し、formatとはNameID(ユーザー識別子)を判定する方式を指します。
Okta目線で言い換えれば、アプリ側でログイン先を判定して貰うためにOktaから送信している値と型に関する情報のまとまりでしょうか。(詳細はこちらに記載されていますので、興味ある方はどうぞ)
解決策
発生条件のいずれかを回避できるようアプリケーションの構成を変更することで、ユーザー属性を更新した際に
- プロビジョニングを構成する
- 対応していないアプリケーションでは実質的な選択肢からは外れる
- Application username formatでカスタム式を用いる
解決策 1. については各アプリケーションの手順書に従っていただくとして、ここでは解決策 2. について紹介していきます。
手順
- アプリケーション画面の [サインオン/認証] タブ > [アプリケーションユーザー名の形式] で “カスタム” を選択する
- Okta Expression Language に基づいたカスタム式を入力し、保存する
- 例)Oktaユーザー名であれば、user.login が設定値となります
- Okta Expression Language に関してはこちらのブログでも解説しております

設定を変更された際、既にアプリケーションへ割り当てられているユーザーに対しては本変更による自動更新が適用されません。
そのため、本設定完了後にアプリケーションから全ユーザーに対して割り当て解除/再割り当てを行っていただく必要があります。
おわりに
今回は非プロビジョニング環境下における Okta ユーザー属性をアプリケーション側へ反映させる際の手順についてご紹介しました。
さっくりとした内容ですが、本件で困っている方の助けになれば幸いです。
個人的にはOktaを使っていく中で共通して躓きやすいポイントだと感じるので、ユーザー側がカスタム式を使わずとも自動反映されるようなOkta側の機能改修に期待したいですね。ではまた。