[ServiceNow] OAuth2.0을 이용한 REST API를 실행해 보았습니다.

개요



요 전날 에 계속해서 ServiceNow의 REST에 대해서 써 갑니다.
ServiceNow의 REST를 정상적으로 실행하는 경우,
사용자 경로를 베타에 써야합니다 (잘못하면 죄송합니다)
유실했을 때에 위험하다고 생각해 조사해 보았습니다.

조사한 바에 따르면 커뮤니티에 이런 기사이 올라가고 있었습니다.
분명히 ServiceNow에서 OAuth2.0을 사용할 수 있다는 것을 시도해 보았습니다.

절차
① 애플리케이션 레지스트리 생성
②액세스 토큰 취득
③액세스 토큰을 이용한 REST 실행

상세



① 애플리케이션 레지스트리 생성



액세스 토큰을 생성할 때,
ServiceNow에 응용 프로그램 레지스트리를 만들어야 합니다.

1. 시스템 OAuth > 애플리케이션 레지스트리를 엽니다.
2. 신규를 누르십시오.
3. 외부 클라이언트용 Oauth API 엔드포인트 생성을 선택합니다.
4. 이름, 액세스 토큰의 유효기간(초)을 설정하고, 송신을 누르십시오.


②액세스 토큰 취득



REST이므로 CURL 등으로 생성 가능하지만 이번에는 POSTMAN이라는 도구를 사용하여 액세스 토큰을 생성합니다.

 1. 링크 에서 POSTMAN을 다운로드합니다.
2. 다운로드한 Postman-win64-7.34.0-Setup.exe를 실행한다.
3. 새 탭을 열고 메서드를 GET에서 POST로 변경합니다.
4. URL에 「https://인스턴스명.service-now.com/oauth_token.do」를 설정한다.
5. Body를 선택해 「x-www-form-urlencoded」에 체크를 넣어 아래와 같은 파라미터를 설정한다.
grant_type:password
  client_id:【애플리케이션 레지스트리로 생성된 클라이언트 ID 】
  client_secret:【어플리케이션 레지스트리로 생성된 클라이언트 시크릿】
 username:【사용자명】
 password:【비밀번호】
6. SEND를 누르십시오.

설정 화면


실행 결과


③액세스 토큰을 이용한 REST 실행



액세스 토큰 생성에서 얻은 액세스 토큰을 이용하여
REST를 실행할 수 있습니다.
■アクセストークンを利用する場合
curl “https://インスタンス名.service-now.com/api/now/table/incident"
--request POST 
--header "Accept:application/json" 
--header "Content-Type:application/json" 
--data "{'short_description':'CURLから起票','urgency':'2','impact':'2’}” 
--header "Authorization:Bearer 4O7Ctf8bpmGrUvehna5BVUdAS6OiPbz7DAfKqMQtCuuP6n3fACekpKups7KAHZcaZRUlL-hDGDpobm86TU-Akg“
■アクセストークンを利用しない場合
curl "https://インスタンス名.service-now.com/api/now/table/incident"
--request POST 
--header "Accept:application/json" 
--header "Content-Type:application/json" 
--data "{'short_description':'CURLから起票','urgency':'2','impact':'2’}” 
--user “【ユーザ名】”:“【パスワード】"

보충



POSTMAN 이외에서 얻는 방법



CURL


■パスワードを利用する場合
curl --location --request POST "https://devXXXXX.service-now.com/oauth_token.do" ^
--data-urlencode "grant_type=password" ^
--data-urlencode "client_id=XXXXXXXXXXXXXXXXXXXXXXXXXXX" ^
--data-urlencode "client_secret=XXXXXXXXX" ^
--data-urlencode "username=ユーザ名" ^
--data-urlencode "password=パスワード"

■リフレッシュトークンを利用する場合
curl --location --request POST "https://devXXXXX.service-now.com/oauth_token.do" ^
--data-urlencode "grant_type=refresh_token" ^
--data-urlencode "client_id=XXXXXXXXXXXXXXXXXXXXXXXXXXX" ^
--data-urlencode "client_secret=XXXXXXXXX" ^
--data-urlencode "refresh_token=3YiEdubKXp8JjokXXXXXXXXXXXXXXXXJAFZRxvlhf75ZbXXXXXXXA7ZjzVnzpaqWwD1A" 

ServiceNow


var request = new sn_ws.RESTMessageV2();
var body = "grant_type=password&client_id=5728b128c640a4105e22f5a3338bd53b&client_secret=@PJ48#;@Oi&username=【ユーザ名】&password=【パスワード】";
request.setEndpoint('https://【インスタンス名】.service-now.com/oauth_token.do’);
request.setHttpMethod('POST’);
request.setRequestHeader(‘Content-Type’,‘application/x-www-form-urlencoded’); //oauth_token.doはapplication/json形式利用不可
request.setRequestBody(body);var response = request.execute();
var responseBody = response.getBody();
var obj = JSON.parse(responseBody);

gs.log(responseBody); //Json形式でデータを表示
gs.log(obj.access_token); //アクセストークンのみ表示

참고



[ServiceNow] MID Server를 통해 REST API를 실행해 보았습니다.
OAuth 2.0 with Inbound REST(community 기사)

좋은 웹페이지 즐겨찾기