如何使Azure API管理(API网关)CORS策略动态化?

时间:2019-05-21 09:25:37

标签: xml azure cors azure-api-management

我想在Azure API网关中在允许来源部分中动态添加域(来源)。可能吗 ?或者还有另一种方法可以设置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 :(得分:0)

您不能为策略配置动态添加元素,但是可以为它们动态提供值(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>

答案 1 :(得分:0)

我发现一种提及波纹管的方法。

<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。
  • 将响应存储在变量参数中。
  • API返回Json对象 例如:{“ Origin”:“ http://www.example.com”}
  • 形成响应,我获取来源值。并将其分配给<origin></origin>