通过命名值重用APIM策略表达式

时间:2019-06-04 13:36:41

标签: azure azure-api-management

我在重用APIM表达式时遇到问题。

具体地说,下面的命名值是像上面那样创建的,

name      
JWTValidator 

@(
@"<validate-jwt header-name='Authorization' failed-validation-httpcode='401' failed-validation-error-message='Error: expired token or invalid token' require-expiration-time='true' require-scheme='Bearer' require-signed-tokens='true'>
    <openid-config url='xxx' />
    <audiences>
        <audience>xxx</audience>
    </audiences>
    <issuers>
        <issuer>https://xxx</issuer>
    </issuers>
</validate-jwt>"
)

和以下政策:

<policies>
    <inbound>
        <base />
        {{JWTValidator}}
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

但是,策略元素已删除但未插入。

有什么主意吗?

是否有更好的方法来重用策略?

更新

我想将JWTValidator定义为命名值,并在产品级别(如果可能的话)在API级别使用它。

Upate 2

我已更改为以下内容,但是{{JWTValidator}}在保存时会自动删除。

请注意,JWTValidator的值已成功保存,这可能意味着语法正确。

<policies>
    <inbound>
        {{JWTValidator}}
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-properties

https://docs.microsoft.com/en-us/azure/api-management/api-management-policy-expressions

Reusing APIM policy expressions

https://feedback.azure.com/forums/248703-api-management/suggestions/16951852-code-re-use-in-api-policies-using-of-custom-functi

1 个答案:

答案 0 :(得分:0)

这实际上是UI问题。您应该能够在浏览器开发工具中看到PUT请求保存策略成功并返回正确的保存内容。是仅在呈现策略之前删除属性引用的UI。即将修复。

属性可用于完整填写XML属性或XML元素的值。在您的情况下,您尝试使用静态元素设置一部分的值,而使用属性值设置另一部分的值。不幸的是,这不受支持。换句话说,这受支持:

<inbound>
    {{JWTValidator}}
</inbound>

这不是:

<inbound>
    <base />
    {{JWTValidator}}
</inbound>

属性只能整体替换元素值,并且不能与另一个元素并排使用,例如在您的示例中,<base/>旁边。

对于您而言,我认为最好将此策略放在外部范围内:如果需要将其应用于许多操作,则应在API级别使用;如果要用于多个API,则应在产品/全局级别使用。并有政策根据context.Operation.Id/context.Api.Id有条件地应用它。

相关问题