如何在系统上为系统(ServiceNow)进行 REST 调用

问题描述 投票:0回答:1

我需要在 ServiceNow 实例中设置一些 REST 调用。我们需要重用 REST 资源上的一些逻辑,因此我们需要从系统调用系统本身(内部调用)。

我遇到了问题,因为我需要发送请求,但要确保 REST 资源适用于当前会话或当前用户。 例如,如果我是用户 A,则在调用 REST 调用时,我需要通过 REST 调用发送当前用户凭据,以便当资源的代码运行时,它会检测到它正在以用户 A 的身份运行。 我无法显式获取用户的凭据,因此我需要绕过授权标头。

我一直在寻找其他地方,发现发送此标头“X-UserToken”可能会有所帮助。但到目前为止,它对我不起作用。我还发现它需要与一个名为“JSESSIONID”的 cookie 一起发送

在我的 PDI 中,我使用 ServiceNow 的 OTTB API 之一尝试了以下代码:

var request = new sn_ws.RESTMessageV2();
request.setEndpoint('https://dev260217.service-now.com/api/now/table/incident?sysparm_limit=1');
request.setHttpMethod('GET');

request.setRequestHeader("Accept","application/json");
request.setRequestHeader("X-UserToken", gs.getSessionToken() );
// request.setRequestHeader("Cookie", "JSESSIONID=CB997BC0634A850C212C2061F8E4F382");

var response = request.execute();
gs.log(response.getBody());

但它返回 401。 enter image description here

我也尝试过发送cookie:

var request = new sn_ws.RESTMessageV2();
request.setEndpoint('https://dev260217.service-now.com/api/now/table/incident?sysparm_limit=1');
request.setHttpMethod('GET');

request.setRequestHeader("Accept","application/json");
request.setRequestHeader("X-UserToken", gs.getSessionToken() );
request.setRequestHeader("Cookie", "JSESSIONID=CB997BC0634A850C212C2061F8E4F382");

var response = request.execute();
gs.log(response.getBody());

但是当我这样做时,代码似乎陷入了无限循环等待响应: enter image description here

当我从 REST API 资源管理器中尝试相同的操作时,一切都运行良好,因此该工具正在从系统向系统发出请求,并且我认为必须有一种方法可以从脚本中执行此操作。 enter image description here

有谁知道我可能做错了什么? 还有其他替代方法可以解决此问题吗?

感谢您对此线程的任何帮助!

servicenow servicenow-rest-api
1个回答
0
投票

您要从哪里打电话?我接下来的过程是在脚本化 REST [sys_ws_definition] 表中创建 REST 服务并在那里进行配置。然后您可以创建任意数量的方法。如果您将其称为客户端,那么您就可以在方便时拥有真正的异步 Promise。

© www.soinside.com 2019 - 2024. All rights reserved.