特定IPからはSSO、それ以外のIPからはMFAにてServiceNowにログインしたい
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
01-21-2022 03:55 AM
特定IPからはSSO、それ以外のIPからはMFAにてServiceNow(UI16、ServicePortal)にログインできる方法を知りたいです。
<実現したいこと>
端末 | → | ServiceNow | SSO/MFA |
IP(X) | → | UI16 | SSO |
IP(X) | → | Service Portal | SSO |
IP(X以外) | → | UI16 | MFA |
IP(X以外) | → | Service Portal | MFA |
<試したこと>
①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」を設定
端末 | → | ServiceNow | SSO/MFA |
IP(X) | → | UI16 | SSO |
IP(X) | → | Service Portal | 未ログイン状態でアクセスするとService Portalのログイン画面が表示される(SSOされない) |
IP(X以外) | → | UI16 | MFA |
IP(X以外) | → | Service Portal | MFA |
②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」を設定
端末 | → | ServiceNow | SSO/MFA |
IP(X) | → | UI16 | SSO |
IP(X) | → | Service Portal | SSO |
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()」として設定
端末 | → | ServiceNow | SSO/MFA |
IP(X) | → | UI16 | ログイン後強制的にService Portalに飛ばされ、その後UI16に遷移できなくなった |
IP(X) | → | Service Portal | SSO |
IP(X以外) | → | UI16 | ログイン後強制的にService Portalに飛ばされ、その後UI16に遷移できなくなった |
IP(X以外) | → | Service Portal | MFA |
これ以外に<実現したいこと>を実現させる方法や概念について教えていただきたいです。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
01-21-2022 04:44 AM
こんにちは。
やりたいことの実現方法としては、設定としては①が正解で、ServicePortalのログインウィジェットをカスタマイズするのが一番かなと思いました。
ログイン ウィジェット (servicenow.com)
具体的なウィジェットのカスタマイズ方法までは現時点では思いつきませんが、ご参考まで。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
01-23-2022 06:12 PM
あともう一点、ウィジェットのカスタマイズではなく①の設定でSPEntryPageと言うOOTBのScriptIncludeをカスタマイズしてIP(X)に対し、制御を行う方法もありそうです。
getClientIP()と言う関数を使用すれば、IPアドレスを取得できますので、以下の記事などを参考にしてカスタマイズしてください。
How you should allow elevated users enter and exit the service portal (davidmac.pro)
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
01-27-2022 10:05 PM
回答ありがとうございます。また、返答が遅れてすみません。
2点目に回答いただいたSPEntryPageは③にて試していて、ログイン後にサービスポータル画面(/sp)からUI16画面に遷移できなくなったことが問題となっています。
(ログイン後にサービスポータル画面が表示されたが、UI16画面に遷移しようとすると再びサービスポータル画面にリダイレクトされてしまう)
(後だし情報で恐縮ですが、ユーザーがUI16画面とサービスポータル画面の両方を見れること、も要件に入っています)
おそらくSPEntryPageのgetFirstPageURL()にて下記条件を変更することでサービスポータル画面とUI16画面を行き来できるようになるとも考えましたが、現状適切な条件が思い当たらない状況です、、
このあたりにもし知見ございましたらご教授いただきたいです。
if (user.hasRoles() && !redirectURL && !isServicePortalURL)
return;
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
02-04-2022 05:04 AM
一つ目に紹介したログインウィジェットのカスタマイズは試されましたでしょうか。
先にスクリプトインクルードで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
ご参考まで