Повторное использование выражения политики APIM через именованное значение - PullRequest
0 голосов
/ 04 июня 2019

У меня проблема с повторным использованием выражения 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>

Однако элемент политики удаляется и не вставляется.

Есть идеи?

Есть ли лучший способ повторного использования политики?

Upate

Я хочу определить 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

Повторное использование выражений политики APIM

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

1 Ответ

0 голосов
/ 04 июня 2019

Это на самом деле проблема пользовательского интерфейса. Вы должны быть в состоянии видеть в средствах разработки браузера, что запрос PUT для сохранения политики успешно выполняется и возвращает правильно сохраненный контент. Это пользовательский интерфейс, просто удаляющий ссылку на свойство перед представлением политики. Скоро будет исправлено.

Свойство может использоваться для полного заполнения значения атрибута XML или элемента XML. В вашем случае вы пытаетесь установить значение частично со статическим элементом, а в другой - со значением свойства. К сожалению, это не поддерживается. Другими словами, это поддерживается:

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

и это не так:

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

Свойство может заменить только значение элемента в целом, и его нельзя использовать рядом с другим элементом, как в вашем примере, рядом с <base/>.

В вашем случае я считаю, что было бы лучше поместить эту политику во внешнюю область: на уровне API, если вам необходимо применить ее ко многим операциям, на уровне продукта / глобального уровня, если она предназначена для нескольких API. И есть политика, чтобы применить его условно на основе context.Operation.Id/context.Api.Id.

...