我正在开发一个使用Service Now API(Rest)的项目。为此,我们的客户已将我们注册为用户,以便登录并拨打我们需要的所有服务电话。这个项目有一个界面,用户可以在Service Now上拥有一个帐户后登录,他们输入的用户名与用户现在无关,但后来他们将他们的服务现在与用户相关联。他们可以通过这个界面进行一些操作,其中所有这些操作都是使用集成用户/传递完成的,而不是他们现在的用户自己的服务,即使他们不需要与我们共享他们的密码。但是现在需要跟踪正确的用户才能注册服务,而且我特别关注对事件的评论。要评论的端点如下:
其中请求体是一个json对象,就像:
一样简单{
"comments": "My comment is foo bar"
}
但是当这个评论在Service Now上注册时,它在集成用户下而不是评论的用户。有没有什么方法可以让一个特定的用户,考虑到我已经准备好在Service Now上的用户ID,以便按照应该的方式通知它。 我试过阅读Service Now文档,但不知道如何解决它,我还发现了一些关于模仿的内容
答案 0 :(得分:0)
这种情况正在发生,因为您通过“集成用户”代替您自己的帐户代理。只要是这种情况,您的评论就会归功于集成用户。
我可以想出两种方法来解决这个问题。
要求客户直接以用户身份登录系统。
实现一个特殊的API(Scripted REST API,在日内瓦或更高版本中可用),允许您识别事件并输入注释,然后脚本代表您伪造评论,正确归因于作者身份。
由于可能需要额外的许可费用,第一种解决方案可能会很昂贵。
第二种解决方案需要愿意的客户投入2-3小时的开发时间,具体取决于程序员。
答案 1 :(得分:0)
首先,您需要具有足够权限的集成用户。我们的集成用户具有开箱即用的充分权利,但是您的故事可能会有所不同。快速检查是尝试使用菜单模拟为其他用户。
然后,您需要找到要模拟的用户的sys_id。例如:
https:// {instance} .service-now.com / api / now / table / sys_user?sysparm_query = user_name = {username}&sysparm_fields = sys_id
如果具有足够的特权,则可以使用您要模拟的用户的sys id调用以下端点:
成功时的响应代码为200。响应正文可以忽略。该响应的有趣结果是在响应头中为模拟用户设置了一组cookie。这些cookie可以用于后续的REST API调用,直到它们到期为止。使用一些依赖HTTP Rest客户端的方法来捕获它们并将它们提供给下一次调用。
对于Apache HTTP客户端(Java),我正在使用以下方法创建http客户端上下文:
HttpClientContext context = HttpClientContext.create();
context.setCookieStore(new BasicCookieStore());
将事物上下文传递给模拟请求和后续的API调用,直到得到401答复为止,此后,我正在获取cookie。设置新的cookie存储非常重要,否则将使用一些默认的cookie存储。
注意两点: