以下の記事でServiceNowにおけるSAML連携の設定方法を紹介しました。
ServiceNowとIdPのSAML連携が設定されている場合、IdPが保持しているユーザーの属性値 (SAML Assertionに含まれるAttribute) に基づいて、SSO時に自動でServiceNowにユーザーレコードを作成/更新することができるようになります。この機能は"SAML User Provisioning"と呼ばれています。
当機能によって、ServiceNowのUser Table [sys_user]
に登録されていないユーザーであっても、最初からSAML SSO経由でServiceNowにログインができるようになります。また、SSO時に毎回、ServiceNow側のユーザープロファイルをIdPが保持している情報で更新することも可能になります。
この記事ではSAML User Provisioningの設定方法や挙動を紹介します。
検証環境は以下の通りです。
- ServiceNow Version : Tokyo (PDI)
- IdP : Auth0 (Development)
設定手順
1. SAML User Provisioningの有効化
左側のNavigation BarからMulti-Provider SSO > Administration > Propertiesのメニューを開きます。
「Enable Auto Importing of users from all identity providers into the user table」をYesにしてSaveを押下します。
続いてMulti-Provider SSO > Identity Providersのメニューを開き、SAML SSOを設定しているIdPを選択します。
「User Provisioning」タブにある「Auto Provisioning User」をYesにしてUpdateを押下します。
(ユーザーレコードの更新もする場合は「Auto Provisioning User Update User Record Upon Each Login」もYesにします。)
2. Transform Mapのカスタマイズ
SSO時にIdPから提供されるユーザーの情報は、Import Set Tableへ一度取り込まれ、Transform Mapのマッピングに従ってUser Tableの各フィールドにセットされます。
SAML User Provisioning用のImport Set TableとTransform Mapは、IdPにつきそれぞれ1つが自動で生成されます。
ただし、Transform Mapのマッピングの定義までは自動で設定されないため、以下の手順で設定をします。
-
System Import Sets > Administration > Transform Mapsのメニューを開きます。
-
「u_imp_saml_user_[suffix]」という名前のTransform Mapが自動生成されているはずですので、それを開きます。([suffix]はランダムな文字列)
-
下にスクロールすると、「Field Maps」という関連テーブルがあるので、ここにマッピングを追加していきます。
SAML User Provisioningの場合、Field Mapsの各フィールドの意味は次の通りです。- Source field
- Import Set Table側のフィールド名です。SAMLから提供されるAttribute名は、そのままフィールド名になっています。
- Target field
- User Table側のフィールド名です。
- Coalesce
- User Tableにてユーザーを一意に識別できるフィールドに対してTrueを設定します。一般的にはNameIDとして使用するフィールドをTrueとしておけば大丈夫かと思います。
- Source field
IdPが異なるとSource fieldの名前も異なりますが、参考までに今回の検証環境では下図の通り定義しました。
(Tips)
左側のNavigation Barにて「u_imp_saml_user_[suffix].list」と入力してEnterを押下することで、Import Set Tableが参照できます。
このImport Tableにて、SAML AssertionのどのAttributeにどのような値が入っているか、実際のデータで確認ができます。
これを参照にしながらマッピングを定義するとやりやすいです。
挙動確認
ServiceNowのUser Tableにはまだ登録されていないユーザーでSSOを試みます。
IdP側では下図のようなプロファイルで登録されているユーザーです。
SSO用のログインページにて、メールアドレスを入力してSubmitを押下すると、
ServiceNowには未登録のユーザーですが、IdPのログインページへリダイレクトされました。
IdPに登録しているメールアドレス/パスワードを入力してログインを実施すると、ServiceNowへログインできていることが確認できました。