0

Service Now API (Rest) を使用するプロジェクトに取り組んでいます。そのために、クライアントは、ログインして必要なすべてのサービス呼び出しを行うために、私たちをユーザーとして登録しました。このプロジェクトには、ユーザーが Service Now のアカウントを持っていればログインできるインターフェイスがあります。ログインするために入力するユーザー名は、サービス now とは何の関係もありませんが、後で自分のサービス now ユーザーをそれに関連付けます。彼らはこのインターフェイスを介していくつかの操作を行うことができます。ここでは、パスワードを私たちと共有する必要がないため、すべての操作は統合ユーザー/パスではなく、サービスを使用して行われます。しかし、今すぐサービスに登録するには正しいユーザーを追跡する必要があり、特にインシデントへのコメントについて困っています。コメントするエンドポイントは次のとおりです。

http://ホスト名/api/now/table/incident/ {sys_id}

ここで、リクエストボディは次のように単純なjsonオブジェクトです:

{
"comments": "My comment is foo bar"
}

ただし、このコメントが Service Now に登録されている場合は、コメントしたユーザーではなく、統合ユーザーの下にあります。Service Now のユーザー ID を既に持っていることを考えると、特定のユーザーを保持する方法はありますか? Service Now のドキュメントを読んでみましたが、解決方法がわかりませんでした。

4

2 に答える 2

0

まず、十分な権限を持つ統合ユーザーが必要です。私たちの統合ユーザーはすぐに使用できる十分な権利を持っていますが、あなたの話は異なるかもしれません. 簡単なチェックは、メニューを使用して他のユーザーになりすますことです。

  1. 統合ユーザーとして ServiceNow インスタンスにログインします。
  2. https://{instance}.service-now.com/nav_to.do にアクセスします
  3. 右上隅のユーザー名をクリックします。これはドロップダウンです。
  4. 「プロファイル」、「偽装ユーザー」、「ログアウト」の少なくとも 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 を返しますが、フィールドは更新されません。これにより、偽装を使用すると驚くべき失敗モードが発生します。
于 2020-09-08T19:17:04.267 に答える