Rest API Explorer를 사용하여 레코드에서 정보를 검색하려는 경우
10324 단어 ServiceNow
가정
ServiceNow 내부만으로 업무가 완결되지 않고, 외부로부터 curl/shell등을 두드려, 레코드의 상태를 확인하고 싶은 경우를 상정하고(예를 들면, ST 환경과 프로덕션 환경의 설정 차이를 체크하고 싶은 경우), 조사했다 글을 쓴다.
ServiceNow 내부에서 완결하는 경우(기본형)
Rest API Exploer(system web service > rest api explorer)의 table API를 활용한다.
table api 에서는 세세하게 노코드로 설정치나 쿼리를 설정할 수 있다.
예) incident 테이블의 레코드, 필드 조건 (Number/Description/State)을 취득하는 경우
실행 결과는
중단 버튼으로 스크립트를 자동 생성해 주는 기능이 있다.
[powershell 예]
auto_produce.ps1
#Eg. User name="admin", Password="admin" for this code sample.
$user = "admin"
$pass = "admin"
#Build auth header
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $pass)))
# Set proper headers
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add('Authorization',('Basic {0}' -f $base64AuthInfo))
$headers.Add('Accept','application/json')
# Specify endpoint uri
$uri = "https://devxxxx.service-now.com/api/now/table/incident?sysparm_fields=number%2Cdescription%2Cstate&sysparm_limit=1"
# Specify HTTP method
$method = "get"
# Send HTTP request
$response = Invoke-RestMethod -Headers $headers -Method $method -Uri $uri
# Print response
$response.RawContent
endpoint url의 구조
"https://devxxxx.service-now.com/api/now/table/incident?sysparm_fields=number%2Cdescription%2Cstate&sysparm_limit=1"
의 구조가 된다. 위의 조립을 GUI에서 간단하게 해주는 것이 resto api explorer의 장점. 그러나 이것은 완전하지 않고, 취득할 수 없는 테이블(sys_properties)의 존재나, 다른 환경이라고 재기록이 필요하기도 하기 때문에, 이번은 powershell로 조립한다.
powershell
get_incident_record.ps1
Param (
[parameter(mandatory)][string]$mfa
)
$conf_file = "config.json"
$conf = Get-Content $conf_file | ConvertFrom-Json
$user = $conf.userid
$pass = $conf.password + $mfa
$base = $conf.target_url
$restapi = 'api/now/table'
$table = "incident"
$query = "?sysparm_fields=number%2Cdescription%2Cstate&"
$url = $base + $restapi + $table + query
$secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd)
Invoke-RestMethod $url -Credential -o datafile.txt
설정 파일은 외부 파일화하여 읽어들이는 형태로 한다.
config.json
{
"target_url" : "http;//(あなたのインスタンス).servicenow.com",
"userid" : "(あなたのユーザーID)",
"password" : "(あなたのパスワード)"
}
REST 인증의 MFA 대응
REST 인증에서는, 패스워드만을 송신하는 것이 아니라, 패스워드+실시간 6자리수의 코드를 송신할 필요가 있다. 예를 들어, 계정의 패스워드가 「Pass123」이고, 현재의 6 자리 인증 코드가 「987654」인 경우, 패스워드로서 「Pass123987654」를 송신한다.
그래서, 이번 코드의 이하 부분은 그쪽에 대응하고 있다.
Param (
[parameter(mandatory)][string]$mfa
)
...
$pass = $conf.password + $mfa
Reference
이 문제에 관하여(Rest API Explorer를 사용하여 레코드에서 정보를 검색하려는 경우), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yasutaka_ono/items/8ada636a314e9f3b529b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)