1

何百もの WSO2 API を管理する必要があるため、UI からではなく、WSO2 REST API を使用して API を作成および公開しています。Swagger ファイル (json 形式) を使用して API に関するすべての詳細を構成し、curl コマンドを使用してこの Swagger ファイルを公開します。WSO2 API の CORS 構成を有効にしたいと考えています。

WSO2 API 用に提供されているドキュメントは、UI を介して CORS 構成を有効にすることに関する情報のみを提供します。ここにリンクがあります。

UIから直接以外の方法で有効にする方法に関する情報は見つかりませんでした。API の swagger ファイルに次のフィールドを追加しようとしましたが、この変更は公開された API に反映されません。

    "CORSConfiguration": {
        "Enabled": "true",
        "Access-Control-Allow-Origin": "*",
        "Access-Control-Allow-Methods": "GET,PUT,POST,DELETE,PATCH,OPTIONS",
        "Access-Control-Allow-Headers": "authorization,Access-Control-Allow-Origin,Content-Type,SOAPAction",
        "Access-Control-Allow-Credentials": "false"
    }

特定の API の CORS 構成を有効にするためのヘルプをいただければ幸いです。ありがとう :)

4

4 に答える 4

0

@Bee、これが私がやろうとしたことです。

{
  "swagger": "2.0",
  "info": {
    "description": "Registration Type Master",
    "version": "1.0",
    "title": "Test_Entity_Master_API",
    "termsOfService": "urn:tos",
    "contact": {"name":"RD"},
    "license": {
      "name": "Apache 2.0",
      "url": "http://www.apache.org/licenses/LICENSE-2.0"
    }
  },
  "host": "http://sampleurl.com/",
  "basePath": "/samplemethod",
  "schemes": [
    "http"
  ],
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/regtype/createregtype": {
      "post": {
        "summary": "Create reg type entry",
        "tags": [
          "Registration Type Master"
        ],
        "deprecated": false,
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "Body",
            "in": "body",
            "required": true,
            "description": "",
            "schema": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string"
                },
                "value": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "type": "object",
              "properties": {
                "success": {
                  "type": "boolean"
                },
                "error": {
                  "type": "boolean",
                  "default": false
                },
                "message": {
                  "type": "string"
                },
                "data": {
                  "type": "object"
                }
              }
            }
          },
          "500": {
            "description": "",
            "schema": {
              "type": "object",
              "properties": {
                "success": {
                  "type": "boolean",
                  "default": false
                },
                "error": {
                  "type": "boolean"
                },
                "message": {
                  "type": "string"
                },
                "data": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "entity-master-controller",
      "description": "Entity Master Controller"
    }
  ],
     "corsConfiguration":    {
      "accessControlAllowOrigins": ["https://dtdevsso.ril.com"],
      "accessControlAllowHeaders":[
         "authorization",
         "Access-Control-Allow-Origin",
         "Content-Type",
         "SOAPAction"
      ],
      "accessControlAllowMethods":[
         "GET",
         "PUT",
         "POST",
         "DELETE",
         "PATCH",
         "OPTIONS"
      ],
      "accessControlAllowCredentials": "true",
      "corsConfigurationEnabled": "true"
   }
}

この swagger ファイルでは、CORS ペイロードを追加しているにもかかわらず、swagger ファイルを介して API を公開した後は反映されません。

于 2019-08-06T06:33:16.150 に答える
0

CORS サポートをセットアップするには、最初に必要なヘッダーを返す OPTIONS メソッドをリソースに定義する必要があります。swagger のすべてのパスには、cors オプション チャンクが必要です。これがチャンクです。

"/users":
   {
    "options": {
        "summary": "CORS support",
        "description": "Enable CORS by returning correct headers\n",
        "consumes": [
            "application/json"
        ],
        "produces": [
            "application/json"
        ],
        "tags": [
            "CORS"
        ],
        "x-amazon-apigateway-integration": {
            "type": "mock",
            "requestTemplates": {
                "application/json": "{\n  \"statusCode\" : 200\n}\n"
            },
            "responses": {
                "default": {
                    "statusCode": "200",
                    "responseParameters": {
                        "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'",
                        "method.response.header.Access-Control-Allow-Methods": "'*'",
                        "method.response.header.Access-Control-Allow-Origin": "'*'"
                    },
                    "responseTemplates": {
                        "application/json": "{}\n"
                    }
                }
            }
        },
        "responses": {
            "200": {
                "description": "Default response for CORS method",
                "headers": {
                    "Access-Control-Allow-Headers": {
                        "type": "string"
                    },
                    "Access-Control-Allow-Methods": {
                        "type": "string"
                    },
                    "Access-Control-Allow-Origin": {
                        "type": "string"
                    }
                }
            }
        }
    }
}

詳細については、このリンクにアクセスしてください

于 2019-08-06T11:48:27.603 に答える
0

WSO2 で API を作成/更新するために、次のペイロードを使用しました。それは完全に機能しています。こちらの更新が遅くなり申し訳ありません。

{
   "name": "%apiName%",
   "description": "%apiDescription%",
   "context": "/%apiName%",
   "version": "%apiVersion%",
   "provider": "%apiProvider%",
   "apiDefinition": "%swaggger_extended.json% // Input swagger file",
   "wsdlUri": null,
   "status": "CREATED",
   "responseCaching": "Disabled",
   "cacheTimeout": 300,
   "destinationStatsEnabled": false,
   "isDefaultVersion": false,
   "type": "HTTP",
   "transport":    [
      "http",
      "https"
   ],
   "tags": ["%apiTags%"],
   "tiers": ["%apiTiersCollection%"],
   "visibility": "%apiVisibility%",
   "visibleRoles": [],
   "endpointConfig": "%endPointConfig%",
   "gatewayEnvironments": "Production and Sandbox",
   "subscriptionAvailability": null,
   "subscriptionAvailableTenants": [],
   "businessInformation":    {
      "businessOwnerEmail": "%BizOwnerName@ril.com%",
      "technicalOwnerEmail": "%TechOwnerName@ril.com%",
      "technicalOwner": "%TechOwnerName%",
      "businessOwner": "%BizOwnerName%"
   },
   "corsConfiguration":    {
      "accessControlAllowOrigins": ["originURL"],
      "accessControlAllowHeaders":       [
         "authorization",
         "Access-Control-Allow-Origin",
         "Content-Type",
         "SOAPAction"
      ],
      "accessControlAllowMethods":       [
         "GET",
         "PUT",
         "POST",
         "DELETE",
         "PATCH",
         "OPTIONS"
      ],
      "accessControlAllowCredentials": false,
      "corsConfigurationEnabled": true
   }
}
于 2019-09-19T09:21:59.157 に答える