我在重用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
答案 0 :(得分:0)
这实际上是UI问题。您应该能够在浏览器开发工具中看到PUT请求保存策略成功并返回正确的保存内容。是仅在呈现策略之前删除属性引用的UI。即将修复。
属性可用于完整填写XML属性或XML元素的值。在您的情况下,您尝试使用静态元素设置一部分的值,而使用属性值设置另一部分的值。不幸的是,这不受支持。换句话说,这受支持:
<inbound>
{{JWTValidator}}
</inbound>
这不是:
<inbound>
<base />
{{JWTValidator}}
</inbound>
属性只能整体替换元素值,并且不能与另一个元素并排使用,例如在您的示例中,<base/>
旁边。
对于您而言,我认为最好将此策略放在外部范围内:如果需要将其应用于许多操作,则应在API级别使用;如果要用于多个API,则应在产品/全局级别使用。并有政策根据context.Operation.Id/context.Api.Id有条件地应用它。