ダイジェストトークン認証の統合Issue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } ダイジェストトークン認証では、データ、キー、MAC アルゴリズムを使用してダイジェストデータを生成します。あるユーザーがダイジェストデータを使用してインスタンスにアクセスしました。このダイジェストデータは、インスタンス内で計算されたダイジェストデータと比較されます。ダイジェストデータが一致すると、ユーザーは認証されます。 ダイジェストトークン認証はどのように機能しますか? ユーザーはダイジェストトークンを使用してインスタンス URL にアクセスします。 例:https://<instance-name>.service-now.com?glide_sso_id=9bd23f131b121100227e5581be0713d7&SM_USER=admin&DE_USER=SuaGUdiqQZikiOfxcgQZALaQJpE=** デフォルトまたはリダイレクト IdP が構成されていない場合は、glide_sso_id が必要です。 MultiSSO ダイジェストトークン認証では、MultiSSO_DigestToken Installation Exitを使用して、要求パラメーター、Cookie、またはヘッダーを解析します。Now Platform は、プラットフォーム内で構成されたダイジェストトークン構成に基づいてダイジェスト値を計算します。MultiSSO_DigestToken Installation Exitは、インスタンス内で計算されたダイジェストデータを、要求パラメーターから抽出されたダイジェストデータ (DE_USER) と比較します。ダイジェストデータが一致する場合 MultiSSO_DigestToken スクリプトは、ユーザー テーブルに対してユーザー (SM_USER) を検証します。有効なユーザーレコードがある場合、そのユーザーに対するセッションが初期化されます。それ以外の場合、ユーザーは Failed SSO redirect ページにリダイレクトされます。 それ以外の場合、ユーザーは Failed SSO redirect ページにリダイレクトされます。 連携のセットアップ [マルチプロバイダー SSO] > [ID プロバイダー] > [新規] > [作成しようとしている SSO の種類 (What kind of SSO are you trying to create?)] に移動します。([ダイジェスト] を選択します。) 名前 説明 DE_USER ダイジェストトークンは DE_USER とともに送信されます。 SM_USER ユーザーテーブルでルックアップするためのユーザーフィールド ユーザーフィールド ユーザーテーブルでクエリされるフィールドの名前 秘密のパスフレーズ ダイジェストデータを暗号化/復号化するための秘密キー (例:12345) シングルサインオンスクリプト [MultiSSO_DigestedToken] を選択します。このスクリプトは、トークンを復号化してユーザーを認証します。 Failed SSO redirect ユーザーがログイン失敗後にリダイレクトされるページ External logout redirect ユーザーがログアウト後にリダイレクトされるページ [マルチプロバイダー SSO] > [プロパティ] > [マルチプロバイダー SSO を有効化] サポートされているアルゴリズム Now Platform は、デフォルトで HmacSHA1 アルゴリズムを使用してダイジェストトークンを生成します。HMAC アルゴリズムを変更する必要がある場合は、以下の手順を使用してください。 MultiSSO_DigestedToken Installation Exitを開きます。Java でサポートされている MAC アルゴリズムに合わせて MAC_ALG 変数を更新します。Java 8 プラットフォームでは、以下の MAC アルゴリズムがサポートされています。 HmacMD5HmacSHA1HmacSHA224HmacSHA256HmacSHA384HmacSHA512 スクリプティングでダイジェストデータを生成する方法 [システム定義] > [スクリプトバックグラウンド] でこのスクリプトを実行し、さまざまな MAC アルゴリズムでダイジェストデータを生成します。 generateDigestData();function generateDigestData(){ //SM_USER var data="admin"; //Secret Passphrase var secretKey = "12345"; var MAC_ALG_1 = "HmacSHA1"; var MAC_ALG_2 = "HmacSHA224"; var MAC_ALG_3 = "HmacSHA256"; var MAC_ALG_4 = "HmacSHA384"; var MAC_ALG_5 = "HmacSHA512"; var MAC_ALG_6 = "HmacMD5"; //SncAuthentication.encode() function generates digest data.This is compared against DE_USER gs.print("Digest data generated with HmacSHA1: "+SncAuthentication.encode(data, secretKey, MAC_ALG_1)); gs.print("Digest data generated with HmacSHA224: "+SncAuthentication.encode(data, secretKey, MAC_ALG_2)); gs.print("Digest data generated with HmacSHA256: "+SncAuthentication.encode(data, secretKey, MAC_ALG_3)); gs.print("Digest data generated with HmacSHA384: "+SncAuthentication.encode(data, secretKey, MAC_ALG_4)); gs.print("Digest data generated with HmacSHA512: "+SncAuthentication.encode(data, secretKey, MAC_ALG_5)); gs.print("Digest data generated with HmacMD5: "+SncAuthentication.encode(data, secretKey, MAC_ALG_6));} 出力 *** Script: Digest data generated with HmacSHA1: SuaGUdiqQZikiOfxcgQZALaQJpE=*** Script: Digest data generated with HmacSHA224: HcTdLXVPwfK+3MRsI1m9BN10xYXKGTqzWYmGMg==*** Script: Digest data generated with HmacSHA256: IMafPR3HHBl+ykp7ACAfQqMffxtCI86Qv1oI8dqQJr0=*** Script: Digest data generated with HmacSHA384: 3atp1KaQgbr7W+/Wr9Lq7/K+/OTGk1X5YkhF+d+DwiGpI2rSFBP7cC1FN3fDlhLR*** Script: Digest data generated with HmacSHA512: c22+q9VaE720r4uWo19Ot9VTRQXQc1oXKHi3mnWB6G/A6gjDG55DXw6fg8JizH/Z5reovgW1oat8 eZTcqxyKcg==*** Script: Digest data generated with HmacMD5: 8ETw8Cm8Az6JOuWzotRYZA== ディープリンク Now Platform は、ダイジェストトークン認証のディープリンクをサポートしています。認証のため、ディープリンク URL に glide_sso_id、SM_USER、および DE_USER を含めます。 https://<instance-name>.service-now.com/nav_to.do?uri=incident.do?sys_id=9d385017c611228701d22104cc95c371&glide_sso_id=9bd23f131b121100227e5581be0713d7&SM_USER=itil&DE_USER=UjHopjjPczCNpN2xcCXl7kQty4= システムログ glide.authenticate.multisso.debug = true を設定すると、System logs にデバッガーメッセージが出力されます。 ログイン成功 ログイン失敗 Service Portal と CMS のリダイレクト Now Platform は、CMS と Service Portal のダイジェストトークン認証をサポートしていません。これは、CMS と Service Portal にログインページが構成されていることで、ユーザーはプラットフォームに構成されたログインページにリダイレクトされるためです。navpage.do は、プラットフォームがダイジェストトークン認証をサポートする唯一の公開ページです。 ワークアラウンド 1: sys_public テーブルにおいて、Service Portal では $sp が true に設定され、CMS では view_content が true に設定されています。$sp = false および view_content = false に設定すると、プラットフォームでダイジェストトークン認証を使用してユーザーを認証できます。このアプローチでは、ユーザーは Service Portal および CMS 用に構成された公開ページにアクセスすることはできません。 ワークアラウンド 2: CMS と Service Portal の first page を構成します。ログインリダイレクトを構成します (シングルサインオン、ログイン、および URL リダイレクトを参照)。Service PortalCMSログインシナリオの定義を参照インスタンス URL で認証します。プラットフォームは、認証後にユーザーを最初のページ (ランディングページ) にリダイレクトします。 ****アドミンユーザー: ログイン URL https://<instance-name>.service-now.com?glide_sso_id=9bd23f131b121100227e5581be0713d7&SM_USER=admin&DE_USER=SuaGUdiqQZikiOfxcgQZALaQJpE= ユーザーは認証後に navpage.do にリダイレクトされます。 *****ESS ユーザー: ログイン URL https://<instance-name>.service-now.com?glide_sso_id=9bd23f131b121100227e5581be0713d7&SM_USER=ess&DE_USER=er/ve0+vrkJxXlgA3dvjOn306PQ= ユーザーは認証後に Service Portal (最初のページ/ランディングページ) にリダイレクトされます。 ***アドミンユーザー ログイン URL https://<instance-name>.service-now.com/nav_to.do?uri=incident.do?sys_id=9d385017c611228701d22104cc95c371&glide_sso_id=9bd23f131b121100227e5581be0713d7&SM_USER=admin&DE_USER=SuaGUdiqQZikiOfxcgQZALaQJpE= ユーザーは認証後にインシデントレコードにリダイレクトされます。 *** ESS ユーザー https://<instance-name>.service-now.com/nav_to.do?uri=incident.do?sys_id=d297357ddb1ba300dca1f6dc0c96198a&glide_sso_id=9bd23f131b121100227e5581be0713d7&SM_USER=ess&DE_USER=er/ve0+vrkJxXlgA3dvjOn306PQ= ESS ユーザーは認証後に Service Portal にリダイレクトされます。 Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 該当するバージョンについては、以下のドキュメントを参照してください。https://docs.servicenow.com/search?q=Digest+token+authentication Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } Related Links<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 連携のセットアップ、ダイジェストトークンのサンプル実装、インスタンス内のディープリンクに関するドキュメントをご確認ください。 https://docs.servicenow.com/search?q=Digest+token+authenticationhttps://docs.servicenow.com/search?q=Create+links+for+digest+authentication この記事の執筆時点で Java 8 がサポートする MAC アルゴリズム。 https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#Machttps://docs.oracle.com/javase/8/docs/api/javax/crypto/Mac.html