UiPath Orchestrator のAPIを呼び出すためにIISサーバにCORSの設定を追加する(IISでCORS対応)


CORS(Cross Origin Resource Sharing)の概要

あるWEB上のサービスが、RESTのAPIを公開しているとします。
そして自分のWEBアプリから、そのRESTサービスを呼び出したいなんてときがあります。たとえば UiPath Orchestrator APIを使ってロボット一覧を取得して、自分のWEBサイトに表示するとか、そんな場合です。

しかしながら通常WEBブラウザはセキュリティの観点から「WEBアプリ(Script)が他のサイトへHTTPアクセスするのを制限する」という動きをします。いわゆる「同一オリジンポリシー(Same Origin Policy)」にしたがって動作するわけですが、従って通常このRESTサービスの呼び出しは遮断されてしまいます。

(ちなみに「オリジン」ってのは https://www.example.com:443/api/Account/Authenticate などにおける「https://www.example.com:443 」のことです。ここが異なるWEBサイトへの、Scriptをつかったアクセスを遮断するということですね)

さて、信頼関係があるサーバ間ではこの制約をこえて通信したいわけですが、そのためにブラウザは「REST先が自分をOKって言ってくれれば、他のオリジン(Cross Origin)だけどアクセスを許可して、情報を共有しましょう(Resource Sharing)」という機構を用いて通信をおこなう事ができます。この機構が Cross Origin Resource Sharing つまりCORSです。

「IIS上で動いているUiPath Orchestrator が公開しているRESTのAPI」をWEBアプリから呼び出そうとして、CORSの制限に引っかかってしまったので、今回はIISにCORSの設定を追加してみようと思います。

やってみる

確認した環境

AWS上の Windows Server 2019 Detacenter 上のIIS

ダウンロード・インストール

IIS上で稼働するモジュールをインストールします。
https://blogs.iis.net/iisteam/introducing-iis-cors-1-0 より64Bit版のインストーラ(IISCORS_amd64.msi)をダウンロード。
IISサーバ上でインストーラを起動します。手順は「install」をクリックするだけ。

Web.Config に設定追加

メモ帳などで C:\Program Files (x86)\UiPath\Orchestrator\Web.config を開きます。
<system.webServer> の項目を検索して、、、、下記を追加します。

<system.webServer>
  <cors enabled="true" failUnlistedOrigins="true">
      <add origin="*" >
          <allowHeaders allowAllRequestedHeaders="true" />
      </add>
  </cors>
...
</system.webServer>

画面で見るとこんな感じ。

上記は 任意のサイト(*)に対して、すべてのHTTPメソッドを許可する、というとっても緩めな設定にしていますが、実際は特定のオリジンや特定のHTTPメソッドのみ許可するなど、必要最低限のモノにすべきです。ご注意ください。
この辺のConfigurationの方法は、 https://docs.microsoft.com/en-us/iis/extensions/cors-module/cors-module-configuration-reference ココに詳しく書いてありますので、熟読しましょう。

最後に、IISを再起動して、WEBアプリからリクエストしてみましょう。

詳細は割愛しますが、OPTIONSメソッド(CORSをチェックするために呼ばれたHTTPリクエスト)が正常処理され、つぎのRobots 一覧を取得するリクエストも正常終了(Response:200) していますね!

おつかれさまでしたー

関連リンク