Как сделать динамическую политику CORS Azure API Management (API Gateway)? - PullRequest
0 голосов
/ 21 мая 2019

Я хочу динамически добавлять домены (происхождение) в раздел разрешенных источников в шлюзе API Azure.Является ли это возможным ?Или есть другой способ настроить CORS, чтобы мы могли динамически разрешать источники.

    <cors>
        <allowed-origins>
            <origin>http://www.example.com</origin>
        </allowed-origins>
        <allowed-methods>
            <method>GET</method>
            <method>POST</method>
        </allowed-methods>
    </cors>

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Я нашел один способ, о котором упоминаю ниже.

<inbound>
    <base />
    <send-request mode="new" response-variable-name="variable" timeout="600" ignore-error="true">
        <set-url>@("http://MyDomain/ApiMethod?Origin="(string)context.Request.Headers["Origin"].Last())</set-url>
        <set-method>GET</set-method>
        <set-body />
    </send-request>
    <cors>
        <allowed-origins>
            <origin>@((string)((IResponse)context.Variables["variable"]).Body.As<JObject>(true)["Origin"])</origin>
        </allowed-origins>
        <allowed-methods>
            <method>GET</method>
            <method>POST</method>
        </allowed-methods>
    </cors>
</inbound
  • Сначала вызывается API, который принимает Origin в качестве параметра запроса.
  • хранит ответ в переменной , параметр .
  • API возвращает объект Json например: {"Происхождение": "http://www.example.com"}
  • Форма ответа Я получаю Источник Значение. и присвойте его <origin></origin>
0 голосов
/ 21 мая 2019

Вы не можете динамически добавлять элементы в конфигурацию политики, но вы можете динамически предоставлять значения для них (https://docs.microsoft.com/en-us/azure/api-management/api-management-policy-expressions):

<cors>
    <allowed-origins>
        <origin>@(context.Request.Url.ToUri().GetLeftPart(UriPartial.Authority))</origin>
    </allowed-origins>
    <allowed-methods>
        <method>GET</method>
        <method>POST</method>
    </allowed-methods>
</cors>
...