特定IPからはSSO、それ以外のIPからはMFAにてServiceNowにログインしたい

okamit
Tera Contributor

特定IPからはSSO、それ以外のIPからはMFAにてServiceNow(UI16、ServicePortal)にログインできる方法を知りたいです。

<実現したいこと>

端末ServiceNowSSO/MFA
IP(X)UI16SSO
IP(X)Service PortalSSO
IP(X以外)UI16MFA
IP(X以外)Service PortalMFA

 

<試したこと>

①SSO設定(非Auto Redirect IdP)+MFA Context設定

  • Auto Redirect IdP=FalseとしてSSO設定
  • Adaptive Authentication > Policies > Step-Down MFA Policyにて、Policy Inputsに「IP(X)」を設定
  • Adaptive Authentication > MFA Contextにて、Conditionに「IP(X) is true」を設定
端末ServiceNowSSO/MFA
IP(X)UI16SSO
IP(X)Service Portal未ログイン状態でアクセスするとService Portalのログイン画面が表示される(SSOされない)
IP(X以外)UI16MFA
IP(X以外)Service PortalMFA

 

②SSO設定(Auto Redirect IdP)+MFA Context設定

  • Auto Redirect IdP=TrueとしてSSO設定
  • Adaptive Authentication > Policies > Step-Down MFA Policyにて、Policy Inputsに「IP(X)」を設定
  • Adaptive Authentication > MFA Contextにて、Conditionに「IP(X) is true」を設定
端末ServiceNowSSO/MFA
IP(X)UI16SSO
IP(X)Service PortalSSO
IP(X以外)UI16強制的にIdPに飛ばされ、IP(X以外)はIdPとNW疎通できないためエラー
IP(X以外)Service Portal強制的にIdPに飛ばされ、IP(X以外)はIdPとNW疎通できないためエラー

 

③SSO設定(非Auto Redirect IdP)+MFA Context設定+glide.entry.first.page.script設定

  • Auto Redirect IdP=FalseとしてSSO設定
  • Adaptive Authentication > Policies > Step-Down MFA Policyにて、Policy Inputsに「IP(X)」を設定
  • Adaptive Authentication > MFA Contextにて、Conditionに「IP(X) is true」を設定
  • sys_propertiesに「glide.entry.first.page.script=new SPEntryPage().getFirstPageURL()」として設定
端末ServiceNowSSO/MFA
IP(X)UI16ログイン後強制的にService Portalに飛ばされ、その後UI16に遷移できなくなった
IP(X)Service PortalSSO
IP(X以外)UI16ログイン後強制的にService Portalに飛ばされ、その後UI16に遷移できなくなった
IP(X以外)Service PortalMFA

 

これ以外に<実現したいこと>を実現させる方法や概念について教えていただきたいです。

5件の返信5

Ikeda1
Mega Guru

こんにちは。

やりたいことの実現方法としては、設定としては①が正解で、ServicePortalのログインウィジェットをカスタマイズするのが一番かなと思いました。

ログイン ウィジェット (servicenow.com)

具体的なウィジェットのカスタマイズ方法までは現時点では思いつきませんが、ご参考まで。

あともう一点、ウィジェットのカスタマイズではなく①の設定でSPEntryPageと言うOOTBのScriptIncludeをカスタマイズしてIP(X)に対し、制御を行う方法もありそうです。
getClientIP()と言う関数を使用すれば、IPアドレスを取得できますので、以下の記事などを参考にしてカスタマイズしてください。
How you should allow elevated users enter and exit the service portal (davidmac.pro)

okamit
Tera Contributor

回答ありがとうございます。また、返答が遅れてすみません。

 

2点目に回答いただいたSPEntryPageは③にて試していて、ログイン後にサービスポータル画面(/sp)からUI16画面に遷移できなくなったことが問題となっています。

(ログイン後にサービスポータル画面が表示されたが、UI16画面に遷移しようとすると再びサービスポータル画面にリダイレクトされてしまう)

(後だし情報で恐縮ですが、ユーザーがUI16画面とサービスポータル画面の両方を見れること、も要件に入っています)

 

おそらくSPEntryPageのgetFirstPageURL()にて下記条件を変更することでサービスポータル画面とUI16画面を行き来できるようになるとも考えましたが、現状適切な条件が思い当たらない状況です、、

このあたりにもし知見ございましたらご教授いただきたいです。

		if (user.hasRoles() && !redirectURL && !isServicePortalURL)
			return;

一つ目に紹介したログインウィジェットのカスタマイズは試されましたでしょうか。

先にスクリプトインクルードでIP Address取得用のサーバサイドスクリプトを埋め込み

var getUserIpAddress = Class.create();
getUserIpAddress.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getIpAddress: function () {
        var IpAdress = gs.getSession().getClientIP().toString()
            return IpAdress;
    },
    type: 'getUserIpAddress'
});

以下のような形で呼び出すスクリプトをウィジェットへ埋め込んでうまくいけばいいのですが

var ajax = new GlideAjax('getUserIpAddress');
ajax.addParam('sysparm_name', 'getIpAddress'); 
ajax.getXMLAnswer(function(answer) {
        if (answer == 'x'){
   window.location.href('https://<instance_name>.service-now.com/sp/login_with_sso.do?glide_sso_id=8abf82b9dbf08414b9d31649489619d5');
}
});

上記URLは以下の文献を参考にしています

https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB0784347

ご参考まで