LoginSignup
6
3

[ServiceNow]OAuth2.0を利用したREST APIを実行してみた

Last updated at Posted at 2020-12-24

概要

先日に引き続きServiceNowのRESTについて書いていきます。
ServiceNowのRESTを普通に実行する場合、
ユーザパスをベタに書く必要があり(間違ってたらすみません)
流失したときにやばいと思い調査してみました。

調べたところによるとコミュニティにこんな記事が上がっていました。
どうやらServiceNowでOAuth2.0が利用できそうとのことで試してみました。

手順
①アプリケーションレジストリの作成
②アクセストークンの取得
③アクセストークンを利用したREST実行

詳細

①アプリケーションレジストリの作成

アクセストークンを生成するにあたり、
ServiceNowにアプリケーションレジストリを作成する必要があります。

 1.システムOAuth>アプリケーションレジストリを開く。
 2.新規を押下する。
 3.外部クライアント用のOauth APIエンドポイントを作成しますを選択する。
 4.名前、アクセストークンの有効期間(秒)を設定し、送信を押下する。
image.png

②アクセストークンの取得

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を押下する。

 設定画面
image.png

 実行結果
image.png

③アクセストークンを利用した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記事)

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3