0

我想从外部应用程序为 service now 用户模拟密码重置服务,并且我已经在我的 servicenow 开发人员实例上安装了 Password Reset - Orchestration Add-on 插件。除此之外,我还可以在我的 REST 资源管理器中看到 Pwd Reset API 列表(例如 pwd_init、pwd_verify 等)。我浏览了此文档页面上提供的文档, 但是如果我尝试从 Postman 等外部服务调用这些 API,我不知道请求有效负载会是什么样子。我想要类似这个 api 文档的东西。

谁能帮我这个?

4

2 回答 2

1

使用表 API 来执行此操作。为了重置用户的密码,您基本上想从 sys_user 表中更新用户记录的 user_password 字段。

Method: PUT/PATCH
http://<instance>/api/now/table/{tableName}/{sys_id}

这里 tableName 将是 sys_user 和 sys_id 将是用户在 sys_user 表中记录的 sys_id。

API 请求的主体应该是这样的:

{
  "user_password": "resetpasswordtext"
}

请记住,这将重置用户的密码,但新密码不会是“resetpasswordtext”。因此用户将无法使用“resetpasswordtext”登录。

要通过 API 为用户实际设置密码,可以使用与上述相同的表 API。但是为了将密码正确加密存储在数据库中,应在请求 URL 中添加以下查询参数来设置密码。

sysparm_input_display_value=true

所以API调用将是

Method: PUT/PATCH
http://<instance>/api/now/table/{tableName}/{sys_id}?sysparm_input_display_value=true
BODY: {
  "user_password": "newpassword"
}

现在用户可以使用文本“newpassword”登录到实例。希望它对您的用例有所帮助。

于 2018-06-14T20:37:26.420 回答
0

所以,我的用例不涉及使用密码重置 API,但是对于那些有兴趣在外部生成新密码,然后进行 api 调用以将其设置为该用户的新密码的人,这里是一个代码示例根据上面 Milind 的回答:

Python3

def change_password_snow(user, pwd, new_pwd, snow_url, sys_id):
# Set the request parameters
url = snow_url + sys_id    

# Set proper headers
headers = {"Content-Type":"application/xml","Accept":"application/json"}

# Set query params
params = {"sysparm_input_display_value": "true", "sysparm_fields": "user_password"}

# Do the HTTP request
response = requests.patch(url, auth=(user, pwd), headers=headers, params=params, data=f"<request><entry><user_password>{new_pwd}</user_password></entry></request>")

return response

在 ServiceNow 上设置

为此,您在 ServiceNow 中进行身份验证的用户需要具有管理员权限。

要么这样,要么修改 sys_user.user_password ACL 以允许非管理员用户读取和写入该字段(如果他们具有您选择的角色)。对于我的用例,我创建了一个自定义角色并将其附加到该用户。

于 2021-09-02T20:23:38.900 回答