こんにちは、ServiceNow担当のわっくんです。
この記事では、ServiceNow上でOAuth接続を実現する方法を説明します。
この記事では、ServiceNow上でOAuth接続を実現する方法を説明します。
OAuthとは
OAuthとは、複数のWebサービス(またはアプリケーション)を連携して動作させるための仕組みです。
Webサービスは、個別にIDとパスワードを入力して認証(ログイン)をする必要がありますが、OAuthの利用によりユーザはIDやパスワードを入力することなく、別アプリケーション間の操作ができます。
例えば、ServiceNowで外部公開しているテーブルAPIを、別のアプリから呼び出す場合を考えてみます。
OAuthを利用しない場合は、APIを実行(呼び出す)ためにはIDとパスワードを一緒に指定する必要があるため、ServiceNow管理者は連携先システムにIDとパスワードを公開する必要があります。
OAuthを利用していれば、認可されている間はIDとパスワードを入力することなくAPIが実行できます。
Webサービスは、個別にIDとパスワードを入力して認証(ログイン)をする必要がありますが、OAuthの利用によりユーザはIDやパスワードを入力することなく、別アプリケーション間の操作ができます。
例えば、ServiceNowで外部公開しているテーブルAPIを、別のアプリから呼び出す場合を考えてみます。
OAuthを利用しない場合は、APIを実行(呼び出す)ためにはIDとパスワードを一緒に指定する必要があるため、ServiceNow管理者は連携先システムにIDとパスワードを公開する必要があります。
OAuthを利用していれば、認可されている間はIDとパスワードを入力することなくAPIが実行できます。
OAuthのメリットとデメリット
メリット
OAuthは事前にトークンを取得することが必要ですが、取得後は有効期間が切れるまで許可された操作が可能になります。Webサービス間の接続にIDとパスワードを直接渡すのではなく、トークンを生成してそれを渡すことで、万が一トークンが盗まれても最小限の被害で済みます。
トークンに有効期限を設けたり、権限を制限することで、セキュリティの高いシングルサインオンを実現できます。
デメリット
トークンが漏洩した場合、悪用される可能性があります。初回のトークン取得時や、期限切れのトークンを更新する場合に、ServiceNow のIDとパスワードが必要になります。完全にIDとパスワードを秘匿したい場合は、トークン取得時の認証操作をServiceNowの管理者側で代理操作する等の運用が必要になります。
ServiceNowは、Webアクセス専用のユーザIDの作成、アクセスポリシーの設定やACLの設定を最小限にすることで、被害を最小化することが可能です。OAuthと合わせて利用するとよりセキュアなシステムになります。
OAuthの使い方
最初にトークンを取得する必要があります。
トークンの取得時にIDとパスワードによる認証が必要ですが、一度トークンを取得した後は、トークンを使用してServiceNowにアスセスすることができます。
システム管理者が事前にServiceNowからトークンを取得しておき、任意のWebサービスからトークンを使ってアクセスできるようにしておくことで、利用者はそのWebサービスにログインするだけで、ServiceNowへの個別ログインは不要になります。
ここからは、OAuthでServiceNowに接続する例を紹介します。
次章から下記の観点に分けて説明します。
将来のバージョンアップにより内容が変更されることがあります。
トークンの取得時にIDとパスワードによる認証が必要ですが、一度トークンを取得した後は、トークンを使用してServiceNowにアスセスすることができます。
システム管理者が事前にServiceNowからトークンを取得しておき、任意のWebサービスからトークンを使ってアクセスできるようにしておくことで、利用者はそのWebサービスにログインするだけで、ServiceNowへの個別ログインは不要になります。
ここからは、OAuthでServiceNowに接続する例を紹介します。
次章から下記の観点に分けて説明します。
- ServiceNowでのOAuth接続の設定方法
- 外部アプリからServiceNowへOAuthで接続する方法
OAuthの仕組みではアクセストークンとリフレッシュトークンの2種類のトークンが存在しますが、特に指定しない限りこの記事ではアクセストークンを指します。本記事で紹介する方法は、2023年11月現在(Utahバージョン)の情報に基づきます。
将来のバージョンアップにより内容が変更されることがあります。
ServiceNowでのOAuth接続の設定方法
今回は、外部クライアントアプリケーションが ServiceNowインスタンスにアクセスするためのOAuth設定を作成します。
<手順>
1. まずServiceNow側で、OAuthの設定を登録します。
[すべて] > [システム OAuth] > [アプリケーションレジストリー]に移動し、[新規] をクリックします。
2. インターセプターページで、[外部クライアント用の OAuth API エンドポイントを作成] を選択します。
3.アプリケーションレジストリのフォームに下記の値を設定します。
<設定内容>
名前:
OAuthアクセスが必要なアプリケーションを識別する一意の名前。
クライアントID:
自動生成された一意のアプリケーションIDです。
インスタンスは、アクセストークンを要求するときにクライアントIDを使用します。(読み取り専用)
クライアントシークレット:
インスタンスとクライアントアプリケーションまたはWebサイトの両方が、相互通信を許可するために使用する共有シークレット文字列です。自動生成されるので、空白のままで大丈夫です。
登録後にロックアイコンをクリックするとクライアントシークレットが表示されます。
リダイレクト URL:
認証サーバーがリダイレクトするコールバックURLです。
設定値はクライアントシステム側に確認して設定します。
リフレッシュトークンの有効期間:
リフレッシュトークンが有効な期間です。(単位:秒数)
デフォルトでは、100日(8640000秒)で期限切れになります。
3.ServiceNow内に、OAuth接続で利用するユーザを作成します。
<手順>
1. まずServiceNow側で、OAuthの設定を登録します。
[すべて] > [システム OAuth] > [アプリケーションレジストリー]に移動し、[新規] をクリックします。
2. インターセプターページで、[外部クライアント用の OAuth API エンドポイントを作成] を選択します。
3.アプリケーションレジストリのフォームに下記の値を設定します。
<設定内容>
名前:
OAuthアクセスが必要なアプリケーションを識別する一意の名前。
クライアントID:
自動生成された一意のアプリケーションIDです。
インスタンスは、アクセストークンを要求するときにクライアントIDを使用します。(読み取り専用)
クライアントシークレット:
インスタンスとクライアントアプリケーションまたはWebサイトの両方が、相互通信を許可するために使用する共有シークレット文字列です。自動生成されるので、空白のままで大丈夫です。
登録後にロックアイコンをクリックするとクライアントシークレットが表示されます。
リダイレクト URL:
認証サーバーがリダイレクトするコールバックURLです。
設定値はクライアントシステム側に確認して設定します。
リフレッシュトークンの有効期間:
リフレッシュトークンが有効な期間です。(単位:秒数)
デフォルトでは、100日(8640000秒)で期限切れになります。
3.ServiceNow内に、OAuth接続で利用するユーザを作成します。
外部からServiceNowへOAuthで接続する方法
ここでは、外部のアプリからServiceNowにOAuth接続を行い、インシデントテーブルのデモデータを取得してみます。
今回は一般的なAPIテストツールであるPostmanから、ServiceNowにOAuthで接続してみます。
下記の手順でOAuthの認証情報を設定すると、ServiceNowのAPIが実行できます。
<手順>
1.Postman上で、[Authorization]タブを登録します。
Type:「OAuth 2.0」を選択します。
Add authorization data to:デフォルトのままで大丈夫です。
2.Configure New Tokenの各項目に下記の値を設定する。
3.アクセストークンを取得します。
([Get New Access Token]ボタンを押下します。)
アクセストークンの取得に成功すると、下記のPOPUP画面が表示されます。
4.取得したトークン情報を確認する画面が表示されます。
同じ設定で複数回トークンを取得する場合は、識別のために[Token Name]を変更しておくと便利です。
(下記画像の例では、末尾にトークンの取得日付を追加しています。)
この画面で [Use Token]ボタンを押下すると、取得したトークンを利用することができます。
5.トークン取得後にTable APIのリクエストを送信すると、下記のように結果が取得できます。
(OAuth接続でインシデントのデータが取得できたことになります)
今回は一般的なAPIテストツールであるPostmanから、ServiceNowにOAuthで接続してみます。
下記の手順でOAuthの認証情報を設定すると、ServiceNowのAPIが実行できます。
<手順>
1.Postman上で、[Authorization]タブを登録します。
Type:「OAuth 2.0」を選択します。
Add authorization data to:デフォルトのままで大丈夫です。
2.Configure New Tokenの各項目に下記の値を設定する。
3.アクセストークンを取得します。
([Get New Access Token]ボタンを押下します。)
アクセストークンの取得に成功すると、下記のPOPUP画面が表示されます。
4.取得したトークン情報を確認する画面が表示されます。
同じ設定で複数回トークンを取得する場合は、識別のために[Token Name]を変更しておくと便利です。
(下記画像の例では、末尾にトークンの取得日付を追加しています。)
この画面で [Use Token]ボタンを押下すると、取得したトークンを利用することができます。
5.トークン取得後にTable APIのリクエストを送信すると、下記のように結果が取得できます。
(OAuth接続でインシデントのデータが取得できたことになります)
まとめ
今回はServiceNow側で、他のクライアントアプリケーションからOAuth接続するための設定方法をご紹介しました。
既にサードパーティプロバイダーのOAuthが導入されている場合は、それを利用して、ServiceNowインスタンスに接続することも可能です。業務要件に応じて、最適な方を選択できます。
ServiceNowの高度な実装には、弊社のServiceNow導入サービスをよろしくお願いいたします。
ServiceNowについて更に詳しく知りたい方は、
ServiceNowに熟知したSTSメンバーがよりよいシステム構築をご提案しますので、ぜひご相談ください。
既にサードパーティプロバイダーのOAuthが導入されている場合は、それを利用して、ServiceNowインスタンスに接続することも可能です。業務要件に応じて、最適な方を選択できます。
ServiceNowの高度な実装には、弊社のServiceNow導入サービスをよろしくお願いいたします。
ServiceNowについて更に詳しく知りたい方は、
ServiceNowに熟知したSTSメンバーがよりよいシステム構築をご提案しますので、ぜひご相談ください。