3

発信者がヘッダーで送信する API キーを使用するように Google API Gateway をセットアップしようとしています。
私のAPI構成yamlは次のようになります:

...
securityDefinitions:
  api_key_header:
    type: apiKey
    name: key
    in: header
  api_key_query:
    type: apiKey
    name: key
    in: query
paths:
  /foo-header:
    get:
      summary: Test foo endpoint
      operationId: testGet-header
      x-google-backend:
        address: "<backend address>"
        protocol: h2
        path_translation: APPEND_PATH_TO_ADDRESS
      security:
        - api_key_header: []
      responses:
        204:
          description: A successful response
  /foo-query:
    get:
      summary: Test foo endpoint
      operationId: testGet-header
      x-google-backend:
        address: "<backend address>"
        protocol: h2
        path_translation: APPEND_PATH_TO_ADDRESS
      security:
        - api_key_query: []
      responses:
        204:
          description: A successful response 

ヘッダーまたはクエリ パラメーターを介して有効な API キーが提供されない場合、両方の呼び出しが失敗し、401 ステータスで失敗すること/foo-headerが予想されます。/foo-query

しかし、実際に/foo-queryは期待どおりに動作するだけです。
リクエスト/foo-headerヘッダーに API キーが指定されていない場合でも、バックエンドに渡すリクエスト。

構成に問題がありますか、それともリクエスト ヘッダーに API キーが指定されている場合に Google API Gateway が正しく動作しないのでしょうか?

4

2 に答える 2

0

Google API Gateway のドキュメントに次のように記載されているため、リクエスト ヘッダーに API キーが指定されている場合、Google API Gatewayは正常に動作するはずです。

デベロッパーは、Cloud Console のプロジェクトで API キーを生成し、そのキーを API へのすべての呼び出しにクエリパラメータとして、またはリクエストヘッダーに埋め込みます。

しかし、報告された動作を再現できたので、構成に問題があるとは思いません。

そのために、Google API Gateway の GCP クイックスタートに従い、OpenAPI仕様も 2 つのパスが含まれるように少し変更しました。

paths:
  /foo-header:
    get:
      summary: Test security
      operationId: headerkey
      x-google-backend:
        address: [MY_CLOUD_FUNCTION_1]
      security:
      - api_key_header: []
      responses:
        '200':
          description: A successful response
          schema:
            type: string
  /foo-query:
    get:
      summary: Test security
      operationId: querykey
      x-google-backend:
        address: [MY_CLOUD_FUNCTION_2]
      security:
      - api_key_query: []
      responses:
        '200':
          description: A successful response
          schema:
            type: string
securityDefinitions:
  # This section configures basic authentication with an API key.
  api_key_header:
    type: "apiKey"
    name: "key"
    in: "header"
  api_key_query:
    type: "apiKey"
    name: "key"
    in: "query"

あなたと同じように、/foo-headerAPI キーが提供されていない場合でも、リクエストがバックエンドに渡されるのを見ることができました。


適切な GCP エンジニアリング チームによってレビューされるように、 Public Issue Trackerでこの問題を報告することをお勧めします。

于 2021-01-27T17:07:54.853 に答える