ServiceNowはいくつかのログイン方法を提供しており、今回はOpenID Connect(以下OIDC)での設定方法を紹介します。
(全てDeveloper用の無料枠で再現可能です。)
当記事ではOIDCそのものは解説は割愛させて頂きますが、OIDCのプロバイダーとしてAuth0を利用します。
OIDCから取得される情報はOIDCプロバイダーによって異なり、社内認証システムなどを利用する場合はそれぞれのドキュメントを理解する必要があります。
設定概要
OIDCにおいては、認証を行う側のシステムをOpenID プロバイダーと呼び、認証情報を利用する側のシステムをクライアントアプリと呼びます。
OIDCの認証フローについてはこちらの記事が分かりやすいかと思います。
一番分かりやすい OpenID Connect の説明
今回の場合、ServiceNowがクライアントアプリとなります。
OpenID プロバイダーは、実際には社内認証システムで使われているIDaaSなどで連携させることになりますが、ここでは検証用としてAuth0を使用します。
手順概要
おおまかな構築の流れは以下の通りです。
- Auth0の設定
- ServiceNowをクライアントアプリとして登録
- テスト用ユーザーの作成
- ServiceNowの設定
- Multi-Provider SSO Pluginのインストール
- ACR (Account Recovery) の有効化 (追記)
- Multi-Provider SSOの設定
- Auth0をIdPとして登録
- テスト用ユーザーの作成
- Activate
- 動作確認
今回ServiceNowは無料のDeveloperインスタンスを、Auth0はFreeプランを使用することとします。それぞれを使用できるまでの手順はここでは省かさせていただきます。
1. Auth0の設定
1-1. ServiceNowをSPとして登録
-
ダッシュボードから Applications -> Applications -> Create Application を選択する。
-
Create Application ダイアログが開くので、任意の Name を入力 → Regular Web Applications → Create を選択
-
作成が完了すると Quick Start が開くので、 Settings タブに移動し Application URIs の Allowed Callback URLs を設定する。
設定するURLは次のものです。https://[yourinstance].service-now.com/navpage.do
-
同じく Settings タブ内にある、 Basic Infomation は後述のSericeNowの設定で使用する。必要に応じて控えておく。
1-2. テスト用ユーザーの作成
ユーザーはADなどで管理するケースが多いですが、今回は小規模テストであるためAuth0に直接ユーザーを作成します。
2. ServiceNowの設定
2-1. Multi-Provider SSO Pluginのインストール
ServiceNowにSSO機能を導入するためのPluginをインストールします。
System Application > All Available Application > Allのメニューを開き、"Integration - Multiple Provider Single Sign-On Installer" をインストールします。
2-2. ACR (Account Recovery) の有効化
SSOを使用するにあたって、ACR (Account Recovery) の機能を有効化することが必須になっています。
ACRは、SSOログインが成立しなくなってしまった場合に備え、管理者のみローカル認証によるログイン (SSOバイパス) ができるようにする機能です。
ACRのセットアップを行うには、Multi-Provider SSO > Account Recovery > Propertiesのメニューを開きます。
下図の画面が現れますので、Step2.の「Click here」の部分を押下します。
ACR Userのローカル認証はローカルパスワード + MFAですので、MFAの登録を行います。
Google AuthenticatorなどのTOTPアプリをスマートフォンにインストールし、手順に従いデバイスを登録をします。
デバイス登録が完了するとEnable account recoveryボタンを押せるようになります。
ボタンを押下してACRの有効化は完了です。
2-3. Multi-Provider SSOの有効化
Navigation BarからMulti-Provider SSO > Administration > Propertiesのメニューを開きます。
Enable multiple provider SSO にチェックを入れ、SSO認証を有効化します。
2-4. Auth0をOIDCプロバイダーとして登録
-
Multi-Provider SSO > Identity Providersのメニューを開きます。Newを押下して認証プロバイダーの登録を行います。
-
しばらく待つとポップアップが現れるので、 1-1 手順4 で取得した情報を入力します。
Well Known Configuration URL
は Auth0 ダッシュボード → Applications → Applications → [作成したアプリケーション] → Settings → Advanced Settings → Endpoints → OAuth の OpenID Configuration から確認できます。
-
作成されたら次の設定をします。
- Automatically provision users
- SSOでログインされた際にServiceNowのユーザーテーブルにアカウントがなければ自動作成します。(注意: SSOに登録されているユーザーだ誰でもログイン出来るようになるオプションですので、場合によって無効化してください。)
- Update User on next login
- 次回ログイン時にSSOから受け取った情報を元にServiceNowに、登録されているユーザーアカウントの情報を更新します。
- ID Token Datasource
- SSOから受け取った情報のマッピングなどを定義しているテーブルです。今回のAuth0はサンプルが登録されているためそのままこれを利用します。
- 社内認証システムなどで別途マッピングの設定が必要な場合の手順は後述します。
- User roles applied to provisioned users
- ユーザーアカウントを自動的にプロビジョニングする際に付与するロールを選択します。
今回は guest と言うロールを作成し設定しています。
- ユーザーアカウントを自動的にプロビジョニングする際に付与するロールを選択します。
4. ここで、この認証プロバイダのsys_idを取得します。
sys_idがこの後のユーザー作成で利用します。
5. Update を押下し、設定を反映します。
2-5. テスト用ユーザーの作成
2-4 で Automatically provision users
を有効化していても、最初のユーザーは作成しておかないとうまくいかないようなのでServiceNow側にユーザーを作成します。
-
All → User Administration → Users から ユーザーテーブルを開き、 New を押下して新しいユーザーを作成します。
-
ユーザー作成に必要な情報と、
SSO Source
に2-4-4で取得したsys_id
をsso:<sys_id>
の形式で入力します。
SSO Sourceフィールドが表示されていない場合、左上のハンバーガーメニューから Configure → Form Layout と進み、項目を追加してください。 -
Submitを押下してユーザー作成は完了です。
これにて準備が整いましたので、実際にOIDC認証ができるかテストします。
3. 動作確認
実際にOIDCでログインが出来るか確かめます。
プライベートウインドウなどで新しいブラウザを開き、ServiceNowのログインページにアクセスします。
Login with SSOを押下します。
User IDを入力してSubmitを押下します。
(ここで入力欄にUser IDと表示されているのは、2-2.にてThe field on the user table...をuser_nameにしたためです。)
Submitを押下すると、入力されたメールアドレスに基づいてUser Tableから該当するユーザーのレコードが特定されます。特定したユーザーのレコードからSSO Sourceの値を読み取って、そのIdPのログイン画面へリダイレクトします。
今回の場合、Auth0の認証画面が現れるので、Auth0にて登録したユーザーのメールアドレスとパスワードを入力しLOG INを押下します。
認証が通れば、2-5で作成したとしてログイン出来ているのが確認できます。
OIDC項目のマッピングが必要な場合
今回は 2-4-4 の手順でID Token Databse として Auth0 Example を使用しました。
これはOIDCから提供される情報(名前やメールアドレス)をServiceNowのユーザーデータベースに変換しマッピングするものです。
メジャーなOIDCプロバイダー用のものはいくつか用意されているのですが、所属する会社で使っている認証システムでフォーマットが異なるために情報を取得できない場合、これを作成する必要があります。
こちらの設定をするにあたっては、このフォーラム記事が非常に参考になります。
https://www.servicenow.com/community/community-resources/configure-user-autoprovisioning-in-oidc-single-sign-on-sso-in/ta-p/2779595
(本項は後日追記予定)
おわりに
今回ほぼほぼ手探りでServiceNowでOIDCによる認証を行う設定を行いました。
ツッコミどころや修正ポイントがあれば優しく教えていただけますと幸いです。
OIDC経由で入ってきたユーザーに別途ロールなどを適切に設定できる仕組みを整備すれば、ServiceNowのユーザー管理に役立つかと思います。
最後まで読んでいただきありがとうございました。
参考
Single Sign-on (SSO) 用の OpenID Connect (OIDC) 構成の作成
Special Thanks
記事を執筆するにあたって、@tajiokaさんに多大な協力をいただきました。
ありがとうございました。