第4章 セキュリティーの管理


4.1. OpenAPI サービスの認証

OpenAPI サービス操作を保護するには、OpenAPI 仕様を使用して セキュリティースキーム を定義します。これらのスキームは、OpenAPI 仕様ファイルの securitySchemes セクションにあります。その Security Scheme を参照する Security Requirement を追加して操作を設定する必要があります。ワークフローがこのような操作を呼び出すと、その情報を使用して必要な認証設定が決定されます。

このセクションでは、サポートされている認証タイプの概要を示し、ワークフロー内の保護された OpenAPI サービス操作にアクセスするためにそれらを設定する方法を示します。

4.1.1. OpenAPI サービス認証の概要

OpenShift Serverless Logic では、OpenAPI 仕様ファイルで定義された Security Schemes を使用して、OpenAPI サービス操作を保護できます。これらのスキームは、ワークフロー内で呼び出される操作の認証要件を定義するのに役立ちます。

Security Schemes は、OpenAPI ドキュメントの securitySchemes セクションで宣言されています。各スキームは、HTTP Basic、API キーなど、適用する認証の種類を指定します。

ワークフローは、保護された操作を呼び出すときに、これらの定義済みスキームを参照して、必要な認証設定を決定します。

セキュリティースキームの定義例

"securitySchemes": {
  "http-basic-example": {
    "type": "http",
    "scheme": "basic"
  },
  "api-key-example": {
    "type": "apiKey",
    "name": "my-example-key",
    "in": "header"
  }
}
Copy to Clipboard Toggle word wrap

OpenAPI ファイルで Security Schemes が定義されているが、操作の Security Requirements が含まれていない場合、デフォルトでセキュリティー要件を作成するようにジェネレーターを設定できます。これらのデフォルトは、明示的に定義された要件のない操作に適用されます。

そのスキームを設定するには、quarkus.openapi-generator.codegen.default-security-scheme プロパティーを使用する必要があります。default-security-scheme プロパティーは実行時ではなく、コード生成時にのみ使用されます。値は、http-basic-example または api-key-example など、securitySchemes セクションで使用可能なスキームのいずれかと一致する必要があります。

以下に例を示します。

$ quarkus.openapi-generator.codegen.default-security-scheme=http-basic-example
Copy to Clipboard Toggle word wrap

4.1.2. OpenAPI サービスの認証情報の設定

認証スキームによって保護された OpenAPI サービス操作を呼び出すには、アプリケーションで対応する認証情報とパラメーターを設定する必要があります。OpenShift Serverless Logic はこれらの設定を使用して、ワークフローの実行中に外部サービスに対して認証を行います。

このセクションでは、OpenAPI 仕様ファイルで宣言されたセキュリティースキームに必要な設定プロパティーを定義および適用する方法を説明します。これらの認証情報を提供するには、application.properties、ワークフローに関連付けられた ConfigMap、または SonataFlow CR の環境変数のいずれかを使用できます。

注記

OpenAPI 仕様ファイルで定義されたセキュリティースキームは、同じファイルで使用可能なすべての操作に対してグローバルです。つまり、特定のセキュリティースキームに対して設定された設定は、他の保護された操作にも適用されます。

前提条件

  • OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
  • OpenAPI 仕様に 1 つ以上のセキュリティースキームが含まれている。
  • OpenAPI 仕様ファイルにアクセスできる。
  • http-basic-example または api-key-example を設定するスキームを特定している。
  • application.properties ファイル、ワークフロー ConfigMap、または SonataFlow CR にアクセスできる。

手順

  • プロパティーキーを作成するには、次の形式を使用します。

    quarkus.openapi-generator.[filename].auth.[security_scheme_name].[auth_property_name]
    Copy to Clipboard Toggle word wrap
    • filename は、security_example_json など、OpenAPI 仕様を含むファイルのサニタイズされた名前です。この名前をサニタイズするには、アルファベット以外の文字をすべて _ アンダースコアに置き換える必要があります。
    • security_scheme_name は、OpenAPI 仕様ファイル内のセキュリティースキームオブジェクト定義のサニタイズされた名前です (例: http_basic_example または api_key_example)。この名前をサニタイズするには、アルファベット以外の文字をすべて _ アンダースコアに置き換える必要があります。
    • auth_property_name は、ユーザー名など、設定するプロパティーの名前です。このプロパティーは、定義されたセキュリティースキームタイプによって異なります。

      注記

      環境変数を使用してプロパティーを設定する場合は、MicroProfile 環境変数のマッピングルールに従ってください。プロパティーキー内のアルファベット以外の文字をすべてアンダースコア _ に置き換えて、キー全体を大文字に変換できます。

次の例は、application.properties、ワークフローに関連付けられた ConfigMap、または SonataFlow CR で定義された環境変数を使用して、これらの設定プロパティーを提供する方法を示しています。

application.properties ファイルを使用して認証情報を設定する例

quarkus.openapi-generator.security_example_json.auth.http_basic_example.username=myuser
quarkus.openapi-generator.security_example_json.auth.http_basic_example.password=mypassword
Copy to Clipboard Toggle word wrap

ワークフロー ConfigMap を使用して認証情報を設定する例

apiVersion: v1
data:
  application.properties: |
    quarkus.openapi-generator.security_example_json.auth.http_basic_example.username=myuser
    quarkus.openapi-generator.security_example_json.auth.http_basic_example.password=mypassword
kind: ConfigMap
metadata:
  labels:
    app: example-workflow
  name: example-workflow-props
  namespace: example-namespace
Copy to Clipboard Toggle word wrap

注記

ワークフローの名前が example-workflow の場合、ユーザー定義プロパティーを持つ ConfigMap の名前は example-workflow-props にする必要があります。

SonataFlow CR で環境変数を使用して認証情報を設定する例

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
  name: example-workflow
  namespace: example-namespace
  annotations:
    sonataflow.org/description: Example Workflow
    sonataflow.org/version: 0.0.1
    sonataflow.org/profile: preview
spec:
  podTemplate:
    container:
      env:
        - name: QUARKUS_OPENAPI_GENERATOR_SECURITY_EXAMPLE_JSON_AUTH_HTTP_BASIC_EXAMPLE_USERNAME
          value: myuser
        - name: QUARKUS_OPENAPI_GENERATOR_SECURITY_EXAMPLE_JSON_AUTH_HTTP_BASIC_EXAMPLE_PASSWORD
          value: mypassowrd
Copy to Clipboard Toggle word wrap

4.1.3. HTTP Basic 認証の例

次の例は、HTTP Basic 認証スキームを使用してワークフロー操作を保護する方法を示しています。security-example.json ファイルは、http-basic-example セキュリティースキームを使用する単一の操作 sayHelloBasic を持つ OpenAPI サービスを定義します。アプリケーションプロパティー、ワークフロー ConfigMap、または環境変数を使用して認証情報を設定できます。

HTTP Basic 認証を使用した OpenAPI 仕様の例

{
  "openapi": "3.1.0",
  "info": {
    "title": "Http Basic Scheme Example",
    "version": "1.0"
  },
  "paths": {
    "/hello-with-http-basic": {
      "get": {
        "operationId": "sayHelloBasic",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [{"http-basic-example" : []}]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "http-basic-example": {
        "type": "http",
        "scheme": "basic"
      }
    }
  }
}
Copy to Clipboard Toggle word wrap

この例では、securitySchemes セクションで定義された http-basic-example スキームを使用して、sayHelloBasic 操作が保護されます。ワークフローでこの操作を呼び出す場合は、適切な認証情報を設定する必要があります。

4.1.3.1. HTTP Basic 認証でサポートされている設定プロパティー

次の設定キーを使用して、http-basic-example スキームの認証情報を提供できます。

Expand
説明プロパティーキー

ユーザー名の認証情報

quarkus.openapi-generator.[filename].auth.[security_scheme_name].username

quarkus.openapi-generator.security_example_json.auth.http_basic_example.username=MY_USER

パスワードの認証情報

quarkus.openapi-generator.[filename].auth.[security_scheme_name].password

quarkus.openapi-generator.security_example_json.auth.http_basic_example.password=MY_PASSWD

[filename] はサニタイズされた OpenAPI ファイル名 security_example_json に置き換え、[security_scheme_name] はサニタイズされたスキーム名 http_basic_example に置き換えることができます。

4.1.4. ベアラートークン認証の例

次の例は、HTTP ベアラー認証スキームを使用して OpenAPI 操作を保護する方法を示しています。security-example.json ファイルは、認証に http-bearer-example スキームを使用する sayHelloBearer 操作を含む OpenAPI サービスを定義します。ワークフローの実行中に保護された操作にアクセスするには、アプリケーションプロパティー、ワークフロー ConfigMap、または環境変数を使用してベアラートークンを設定する必要があります。

ベアラートークン認証を使用した OpenAPI 仕様の例

{
  "openapi": "3.1.0",
  "info": {
    "title": "Http Bearer Scheme Example",
    "version": "1.0"
  },
  "paths": {
    "/hello-with-http-bearer": {
      "get": {
        "operationId": "sayHelloBearer",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "http-bearer-example": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "http-bearer-example": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  }
}
Copy to Clipboard Toggle word wrap

この例では、sayHelloBearer 操作は http-bearer-example スキームによって保護されています。この操作を正常に呼び出すには、設定で有効なベアラートークンを定義する必要があります。

4.1.4.1. ベアラートークン認証でサポートされている設定プロパティー

ベアラートークンを提供するには、次の設定プロパティーキーを使用できます。

Expand
説明プロパティーキー

ベアラートークン

quarkus.openapi-generator.[filename].auth.[security_scheme_name].bearer-token

quarkus.openapi-generator.security_example_json.auth.http_bearer_example.bearer-token=MY_TOKEN

[filename] はサニタイズされた OpenAPI ファイル名 security_example_json に置き換え、[security_scheme_name] はサニタイズされたスキーム名 http_bearer_example に置き換えることができます。

4.1.5. API キー認証の例

次の例は、apiKey 認証スキームを使用して OpenAPI サービス操作を保護する方法を示しています。security-example.json ファイルは、api-key-example セキュリティースキームを使用する sayHelloApiKey 操作を定義します。アプリケーションプロパティー、ワークフロー ConfigMap、または環境変数を使用して API キーを設定できます。

API キー認証を使用した OpenAPI 仕様の例

{
  "openapi": "3.1.0",
  "info": {
    "title": "Api Key Scheme Example",
    "version": "1.0"
  },
  "paths": {
    "/hello-with-api-key": {
      "get": {
        "operationId": "sayHelloApiKey",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [{"api-key-example" : []}]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "api-key-example": {
        "type": "apiKey",
        "name": "api-key-name",
        "in": "header"
      }
    }
  }
}
Copy to Clipboard Toggle word wrap

この例では、sayHelloApiKey 操作は、HTTP リクエストヘッダーで渡される API キーを使用する api-key-example セキュリティースキームによって保護されています。

4.1.5.1. API キー認証でサポートされている設定プロパティー

次の設定プロパティーを使用して API キーを設定できます。

Expand
説明プロパティーキー

API キー

quarkus.openapi-generator.[filename].auth.[security_scheme_name].api-key

quarkus.openapi-generator.security_example_json.auth.api_key_example.api-key=MY_KEY

[filename] はサニタイズされた OpenAPI ファイル名 security_example_json に置き換え、[security_scheme_name] はサニタイズされたスキーム名 api_key_example に置き換えることができます。

apiKey スキームタイプには、Open API サービスが呼び出されたときに使用するキー名を設定する追加の name プロパティーが含まれています。また、キーを渡す形式は、in プロパティーの値によって異なります。

  • 値が header の場合、キーは HTTP リクエストパラメーターとして渡されます。
  • 値が cookie の場合、キーは HTTP Cookie として渡されます。
  • 値が query の場合、キーは HTTP クエリーパラメーターとして渡されます。

この例では、キーは api-key-name: MY_KEY として HTTP ヘッダーに渡されます。

OpenShift Serverless Logic はこれを内部的に管理するため、プロパティー値を設定する以外に追加の設定は必要ありません。

4.1.6. clientCredentials OAuth 2.0 認証の例

次の例は、OAuth 2.0 clientCredentials フローを使用して OpenAPI 操作を保護する方法を示しています。OpenAPI 仕様では、oauth-example セキュリティースキームを使用する sayHelloOauth2 操作が定義されています。HTTP Basic や API キーなどのより単純な認証方法とは異なり、OAuth 2.0 認証では、Quarkus OpenID Connect (OIDC) クライアントとの追加統合が必要です。

OAuth 2.0 を使用した OpenAPI 仕様の例

{
  "openapi": "3.1.0",
  "info": {
    "title": "Oauth2 Scheme Example",
    "version": "1.0"
  },
  "paths": {
    "/hello-with-oauth2": {
      "get": {
        "operationId": "sayHelloOauth2",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "oauth-example": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "oauth-example": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "authorizationUrl": "https://example.com/oauth",
            "tokenUrl": "https://example.com/oauth/token",
            "scopes": {}
          }
        }
      }
    }
  }
}
Copy to Clipboard Toggle word wrap

この例では、sayHelloOauth2 操作は、トークンベースの認証に clientCredentials フローを使用する oauth-example セキュリティースキームによって保護されています。

4.1.6.1. OIDC Client Filter エクステンションによる OAuth 2.0 サポート

OAuth 2.0 トークン管理は、Quarkus OidcClient によって処理されます。この統合を有効にするには、次の例に示すように、Quarkus OIDC Client Filter と Quarkus OpenApi Generator OIDC エクステンションをプロジェクトに追加する必要があります。

Maven を使用してエクステンションを追加する例

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-oidc-client-filter</artifactId>
  <version>3.15.4.redhat-00001</version>
</dependency>

<dependency>
  <groupId>io.quarkiverse.openapi.generator</groupId>
  <artifactId>quarkus-openapi-generator-oidc</artifactId>
  <version>2.9.0-lts</version>
</dependency>
Copy to Clipboard Toggle word wrap

gitops プロファイルを使用してエクステンションを追加する例

ワークフローイメージをビルドするときに、QUARKUS_EXTENSIONS ビルド引数を次の値で設定するようにしてください。

$ --build-arg=QUARKUS_EXTENSIONS=io.quarkus:quarkus-oidc-client-filter:3.15.4.redhat-00001,io.quarkiverse.openapi.generator:quarkus-openapi-generator-oidc:2.9.0-lts
Copy to Clipboard Toggle word wrap

preview プロファイルを使用してエクステンションを追加する例

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform-example
  namespace: example-namespace
spec:
  build:
    template:
      buildArgs:
        - name: QUARKUS_EXTENSIONS
          value: io.quarkus:quarkus-oidc-client-filter:3.15.4.redhat-00001,io.quarkiverse.openapi.generator:quarkus-openapi-generator-oidc:2.9.0-lts
Copy to Clipboard Toggle word wrap

注記

SonataFlowPlatform CR に追加されたエクステンションは、preview プロファイルを使用してその namespace にデプロイするすべてのワークフローに含まれます。

4.1.6.2. OidcClient 設定

保護された操作にアクセスするには、application.properties ファイルで OidcClient 設定を定義します。設定では、OpenAPI 仕様のサニタイズされたセキュリティースキーム名 (この場合は oauth_example) を次のように使用します。

# adjust these configurations according with the authentication service.
quarkus.oidc-client.oauth_example.auth-server-url=https://example.com/oauth
quarkus.oidc-client.oauth_example.token-path=/token
quarkus.oidc-client.oauth_example.discovery-enabled=false
quarkus.oidc-client.oauth_example.client-id=example-app
quarkus.oidc-client.oauth_example.grant.type=client
quarkus.oidc-client.oauth_example.credentials.client-secret.method=basic
quarkus.oidc-client.oauth_example.credentials.client-secret.value=secret
Copy to Clipboard Toggle word wrap

この設定では、次のようになります。

  • oauth_example は、OpenAPI ファイル内の oauth-example スキームのサニタイズされた名前と一致します。サニタイズされたスキーム名と対応する OidcClient 間のリンクは、この単純な命名規則を使用することで実現されます。
  • OidcClient は、ワークフロー実行中にトークンの生成と更新を自動的に処理します。

4.1.7. 認可トークンの伝播の例

OpenShift Serverless Logic は、oauth2 または http ベアラーセキュリティースキームタイプを使用する OpenAPI 操作のトークン伝播をサポートします。トークンの伝播により、ワークフローはワークフロー作成中に受信した認可トークンをダウンストリームのサービスに転送できるようになります。この機能は、ワークフローがリクエストを開始したクライアントに代わってサードパーティーのサービスと対話する必要がある場合に役立ちます。

各セキュリティースキームごとにトークンの伝播を個別に設定する必要があります。有効にすると、明示的にオーバーライドされない限り、同じスキームを使用して保護されたすべての OpenAPI 操作で伝播されたトークンが使用されます。

次の例では、security-example.json ファイルで sayHelloOauth2 操作を定義します。この操作では、clientCredentials フローで oauth-example セキュリティースキームを使用します。

トークン伝播を含む OpenAPI 仕様の例

{
  "openapi": "3.1.0",
  "info": {
    "title": "Oauth2 Scheme Example",
    "version": "1.0"
  },
  "paths": {
    "/hello-with-oauth2": {
      "get": {
        "operationId": "sayHelloOauth2",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "oauth-example": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "oauth-example": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "authorizationUrl": "https://example.com/oauth",
            "tokenUrl": "https://example.com/oauth/token",
            "scopes": {}
          }
        }
      }
    }
  }
}
Copy to Clipboard Toggle word wrap

4.1.7.1. 認可トークンの伝播でサポートされている設定プロパティー

次の設定キーを使用して、トークンの伝播を有効にし、カスタマイズできます。

注記

ワークフローがアクティブな間、トークンはダウンストリームのサービスに自動的に渡されます。ワークフローがタイマーやイベントベースの一時停止などの待機状態になると、トークンの伝播は停止します。ワークフローが再開された後、トークンは自動的に再伝播されません。必要に応じて再認証を管理する必要があります。

Expand
プロパティーキー説明

quarkus.openapi-generator.[filename].auth.[security_scheme_name].token-propagation

quarkus.openapi-generator.security_example_json.auth.oauth_example.token-propagation=true

指定されたスキームで保護されたすべての操作のトークン伝播を有効にします。デフォルトは false です。

quarkus.openapi-generator.[filename].auth.[security_scheme_name].header-name

quarkus.openapi-generator.security_example_json.auth.oauth_example.header-name=MyHeaderName

(オプション) トークンを読み取るためのカスタムヘッダー名でデフォルトの認証ヘッダーをオーバーライドします。

[filename] はサニタイズされた OpenAPI ファイル名 security_example_json に置き換え、[security_scheme_name] はサニタイズされたスキーム名 oauth_example に置き換えることができます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat