まず、十分な権限を持つ統合ユーザーが必要です。私たちの統合ユーザーはすぐに使用できる十分な権利を持っていますが、あなたの話は異なるかもしれません. 簡単なチェックは、メニューを使用して他のユーザーになりすますことです。
- 統合ユーザーとして ServiceNow インスタンスにログインします。
- https://{instance}.service-now.com/nav_to.do にアクセスします
- 右上隅のユーザー名をクリックします。これはドロップダウンです。
- 「プロファイル」、「偽装ユーザー」、「ログアウト」の少なくとも 3 つのメニュー項目が必要です。このメニューに「Impersonate User」がない場合、統合ユーザーはいくつかの権限を失います。このメニュー項目を見逃した場合は、システム管理者に連絡して、適切な権限を構成してください。
次に、偽装するユーザーの sys_id を見つける必要があります。例えば:
https://{instance}.service-now.com/api/now/table/sys_user?sysparm_query=user_name={username}&sysparm_fields=sys_id
十分な権限がある場合は、偽装するユーザーの sys id を使用して次のエンドポイントを呼び出すことができます。
- https://{instance}.service-now.com/api/now/ui/impersonate/{user_sys_id} への HTTP POST は、本文が「{}」、コンテンツ タイプが「application/json」です。統合ユーザーとして、このクエリに HTTP 基本認証を提供する必要があります。
成功時の応答コードは 200 です。応答本文は無視できます。この応答の興味深い結果は、応答ヘッダー内の偽装ユーザーの一連の Cookie です。これらの Cookie は、有効期限が切れるまで後続の REST API 呼び出しに使用できます。それらをキャプチャし、次の呼び出しに提供するには、いくつかの HTTP レスト クライアント依存メソッドを使用します。
Apache HTTP クライアント (Java) の場合、次を使用して http クライアント コンテキストを作成しています。
HttpClientContext context = HttpClientContext.create();
context.setCookieStore(new BasicCookieStore());
401 応答を受け取るまで、なりすましリクエストと後続の API 呼び出しにコンテキストを渡します。その後、Cookie を再取得します。新しい Cookie ストアを設定することは重要です。設定しないと、デフォルトの Cookie ストアが使用されます。
2 つの注意事項:
- この API は内部 API のように見えるため、いつでも変更される可能性があります。その場合は、「Impresonate User」メニュー項目が何をするかを探して、自分でそれを繰り返してください。
- ServiceNow のアクセス許可は非常に細かく設定されているため、ターゲット ユーザーに操作を実行するためのアクセス許可が不足している可能性があります。場合によっては、フィールドを更新する権限がない場合、オブジェクトの操作 PATCH は応答 200 を返しますが、フィールドは更新されません。これにより、偽装を使用すると驚くべき失敗モードが発生します。