Rakhi Oza
Rakhi Oza

Reputation: 85

How do I use password reset REST APIs on service now?

I want to simulate the password reset service for service now users from an external application and I have installed Password Reset - Orchestration Add-on plugin on my servicenow developer instance. Along with this I can see a list of Pwd Reset APIs on my REST explorer (e.g pwd_init, pwd_verify, etc). I went through the documentation available on this documentation page but I'm at a loss to understand what the request payload would be like if I'm trying to call these APIs from an external service like Postman. I wanted something similar this api documentation.

Can anyone help me with this?

Upvotes: 2

Views: 3515

Answers (2)

JoshuaHew
JoshuaHew

Reputation: 127

so, my use case did not involve using the Password reset API, but for those of you interested in generating a new password externally, then making an api call to set that as the new password for that user, then here is acode sample that is based on Milind's answer above:

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

Setup on ServiceNow

For this to work, the user you are authenticating with in ServiceNow needs to have Admin privileges.

Either that, or modify the sys_user.user_password ACLs to allow non admin users to read and write to that field if they have a role that you select. For my use case, I created a custom role and attached it to that user.

Upvotes: 0

Milind Gokhale
Milind Gokhale

Reputation: 585

Use the Table APIs to do this. In order to reset a user's password, you basically want to update the user_password field of the user record from sys_user table.

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

here tableName will be sys_user and sys_id will be the sys_id of the user's record in sys_user table.

The body of the API request should be something like this:

{
  "user_password": "resetpasswordtext"
}

Bear in mind that this will reset the user's password but the new password will not be "resetpasswordtext". So the user will not be able to login using "resetpasswordtext".

To actually set the password for a user via API, same table API as above can be used. But in order to store the password properly encrypted in the database, below query parameter should be added in the request URL to set the password.

sysparm_input_display_value=true

So the API call will be

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

Now the text "newpassword" can be used by the user to login to the instance. hope it helps in your use case.

Upvotes: 3

Related Questions