Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

REST サービスの保護

REST サービスで機密データにアクセスする場合、サービスに認証を使用する必要があります。それぞれのユーザに異なるレベルのアクセス権を付与する必要がある場合は、エンドポイントに必要な特権も指定します。

この章は、“REST サービスの作成と編集” の手順に従って REST サービス・クラスを生成済みであることを前提としています。

REST サービスの認証の設定

InterSystems IRIS REST サービスでは、以下のいずれかの認証形式を使用できます。

  • HTTP 認証ヘッダ — REST サービスにはこの認証形式を使用することをお勧めします。

  • Web セッション認証 — URL で疑問符に続けてユーザ名とパスワードを指定します。

  • OAuth 2.0 認証 — 次のサブセクションを参照してください。

REST アプリケーションおよび OAuth 2.0

OAuth 2.0 を使用して REST アプリケーションを認証するには、以下の作業をすべて行います。

  • REST アプリケーションを含むリソース・サーバを、OAuth 2.0 リソース・サーバとして構成します。

  • %Service.CSP の代行認証を許可します。

  • 代行認証を使用するように Web アプリケーション (REST アプリケーション用) が構成されていることを確認します。

  • %SYS ネームスペースで ZAUTHENTICATE という名前のルーチンを作成します。インターシステムズが提供するサンプル・ルーチン REST.ZAUTHENTICATE.mac をコピーして変更することができます。このルーチンは GitHub の Samples-Security サンプルに含まれています (https://github.com/intersystems/Samples-SecurityOpens in a new tab)。“InterSystems IRIS で使用するサンプルのダウンロード” で説明されているようにサンプル全体をダウンロードすることもできますが、単に GitHub でルーチンを開いて、その内容をコピーするほうが簡単です。

    ルーチンで、applicationName の値を変更し、必要に応じてその他の変更を加えます。

"OAuth 2.0 および OpenID Connect の使用法" の “OAuth 2.0 クライアントとしての InterSystems IRIS Web アプリケーションの使用法” の章の “Web クライアントの代行認証の定義 (オプション)” も参照してください。

Important:

HealthShare® で認証を使用している場合は、インターシステムズが提供する ZAUTHENTICATE ルーチンを使用する必要があります。独自のルーチンは作成できません。

REST サービスを使用するために必要な特権の指定

コードの実行やデータへのアクセスに必要な特権を指定するため、インターシステムズのテクノロジではロールベースのアクセス制御 (RBAC) を使用します。詳細は、"承認 : ユーザ・アクセスの制御" を参照してください。

それぞれのユーザに異なるレベルのアクセス権を付与する必要がある場合は、以下の作業を行って許可を指定します。

  • 仕様クラスを変更して、REST サービス、または REST サービスの特定のエンドポイントを使用するために必要な特権を指定した後、リコンパイルします。特権は、許可 (読み取りや書き込みなど) をリソースの名前と組み合わせたものです。

    サブセクションを参照してください。

  • 管理ポータルを使用して、以下の作業を行います。

    • 仕様クラスで参照するリソースを定義します。

    • 特権のセットを付与するロールを定義します。例えば、あるエンドポイントに対する読み取りアクセス権や別のエンドポイントに対する書き込みアクセス権をロールに付与できます。1 つのロールに特権のセットを複数含めることができます。

    • 各自のタスクに必要なすべてのロールにユーザを配置します。

さらに、%CSP.RESTOpens in a new tab クラスの SECURITYRESOURCE パラメータを使用して承認を実行することもできます。

特権の指定

REST サービス全体について特権のリストを指定することも、エンドポイントごとに特権のリストを指定することもできます。そのためには、以下のように操作します。

  1. サービスにアクセスするために必要な特権を指定するには、仕様クラス内の OpenAPI XData ブロックを編集します。info オブジェクトについて、x-ISC_RequiredResource という名前の新しいプロパティを追加します。このプロパティの値は、REST サービスのすべてのエンドポイントへのアクセスに必要となる、定義したリソースとそのアクセス・モード (resource:mode) のコンマ区切りリストです。

    以下に例を示します。

      "swagger":"2.0",
      "info":{
        "version":"1.0.0",
        "title":"Swagger Petstore",
        "description":"A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification",
        "termsOfService":"http://swagger.io/terms/",
        "x-ISC_RequiredResource":["resource1:read","resource2:read","resource3:read"],
        "contact":{
          "name":"Swagger API Team"
        },
    ...
    
  2. 特定のエンドポイントにアクセスするために必要な特権を指定するには、以下の例のように、そのエンドポイントを定義する操作オブジェクトに x-ISC_RequiredResource プロパティを追加します。

          "post":{
            "description":"Creates a new pet in the store.  Duplicates are allowed",
            "operationId":"addPet",
            "x-ISC_RequiredResource":["resource1:read","resource2:read","resource3:read"],
            "produces":[
              "application/json"
            ],
            ...
    
    
  3. 仕様クラスをコンパイルします。このアクションによって、ディスパッチ・クラスが再生成されます。

SECURITYRESOURCE パラメータの使用

追加の承認ツールとして、%CSP.RESTOpens in a new tab のサブクラスであるディスパッチ・クラスには SECURITYRESOURCE パラメータがあります。SECURITYRESOURCE の値は、リソースとその許可であるか、リソースのみです (この場合、関連する許可は Use です)。SECURITYRESOURCE に関連付けられたリソースに対する必要な許可をユーザが持っているかどうかがチェックされます。

Note:

ディスパッチ・クラスで SECURITYRESOURCE の値を指定し、CSPSystem ユーザに十分な特権がない場合、ログイン試行の失敗に関する予期しない HTTP エラー・コードが返されることがあります。このようなエラーを回避するには、指定したリソースに対する許可を CSPSystem ユーザに付与することをお勧めします。

FeedbackOpens in a new tab