通过命名值重用 APIM 策略表达式
Posted
技术标签:
【中文标题】通过命名值重用 APIM 策略表达式【英文标题】:Reusing APIM policy expression via Named Value 【发布时间】:2019-06-04 13:36:41 【问题描述】:我在重用 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 级别。
更新 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】:这实际上是 UI 问题。您应该能够在浏览器开发工具中看到保存策略的 PUT 请求成功并返回正确的保存内容。 UI 只是在呈现策略之前删除了属性引用。很快就会修复。
Property 可用于完整填写 XML 属性或 XML 元素的值。在您的情况下,您尝试设置值的一部分与静态元素和另一部分与属性值。不幸的是,这不受支持。换句话说,这是支持的:
<inbound>
JWTValidator
</inbound>
这不是:
<inbound>
<base />
JWTValidator
</inbound>
属性只能作为一个整体替换元素值,并且不能与另一个元素并排使用,例如在您的示例中,在<base/>
旁边。
在您的情况下,我认为最好将此政策置于外部范围:如果您需要将其应用于许多操作,则在 API 级别;如果适用于多个 API,则在产品/全局级别。并制定政策根据 context.Operation.Id/context.Api.Id 有条件地应用它。
【讨论】:
我不太明白你的意思。请在 OP 上查找更新。 更新了答案。重用 validate-jwt 策略的唯一方法是将其置于上层范围。如果您想将它用于许多 API - 将其放入选择策略内的产品级别,并检查 context.Api.Id 以匹配 API id 之一。 什么时候修复?有我可以订阅的票吗? 是否有计划同时支持<base />
和JWTValidator
?
以上是关于通过命名值重用 APIM 策略表达式的主要内容,如果未能解决你的问题,请参考以下文章