はじめに
この記事はDENSO Advent Calendar 2024の7日目の記事です。
今回は、Oktaを利用したSSOを管理しているエンジニアや管理者向けの記事です。
Okta から SSO 時に使用するユーザー名を動的に変更したい場合に、それを実現する Okta の機能である Okta Expression Language について紹介します。
やりたかったこと
状況を下図に記します。Okta に登録しているユーザー名で使用している domainA
が SSO 先のアプリでは使用できず、別の domainB
を使用することになった場合を想定しています。
私が遭遇した場面ではそうではないのですが、社名変更や M&A があった場合などに Okta 側とアプリ側とで使用可能なドメインがズレていることは稀にあるようです。
この際に Okta アプリケーションの設定で、SSO 時に使用するユーザー名を動的に変更することで、SSO 先のアプリ側の制約に合わせて柔軟に SSO 設定を構築できると考えました。
設定箇所について
Okta Admin Console 上で、ツリーメニューの Applications > Applications を選択し、設定したい対象のアプリケーションを選択します。その後、アプリケーションの設定詳細画面にて、Sign On
タブを選択し、Settings
のカード右上にある Edit
をクリックします。
この Settings
の下部にある Application username format
が該当箇所です。プルダウンメニューで候補を選択できます。この中から Custom
を選択すると、SSO 時のユーザー名の設定変更ができます。
Custom
の選択後、Expression Language Reference
というリンクとともに、Enter an expression
というプレースホルダーの入ったフォームが出現します。ここに Okta Expression Language で SSO 時に使用するユーザー名を記述すれば良いです。
Okta Expression Language について
上述した Okta Expression Language について簡単に紹介します。
これは、Okta 内でのみ解釈可能な記法で、便利な関数を多く含みます。この関数を使って、今回のやりたかったことのケースの様に SSO 先のユーザー名を動的に変更したり、その他 SSO 時に使用する属性値のうち空だった場合にどの様な値を渡すかの定義をできたりします。
今回のケースでの使用方法
今回は String.replace
を使いました。使い方や挙動は以下の通りです。
Function | Input parameter signature | Return type | example | Output |
---|---|---|---|---|
String.replace | (String input, String match, String replacement) | String | String.replace("This is a test", "is", "at") | That at a test |
まとめ
今回は動的にユーザー名を変更したい要望から調査を始め、Okta Expression Language を知り理解を深めることが出来ました。他にも Okta Expression Language を適用して解決できそうな課題があれば試してみたいと思います。