Цель: использовать политику кеширования управления API для кеширования никогда не изменяющегося ответа json.
Исходный (без кеша)
Эта политика поддерживается лазурной функцией, которая возвращает неизменяемый ответ json.
<policies>
<inbound>
<base />
<set-backend-service id="apim-generated-policy" backend-id="azfunc-fluffyoauth2" />
<rewrite-uri template="/WellKnownOpenidConfiguration" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
Думая, что это может быть хорошо для кеширования, я ввел политику поиска в кеше.
<policies>
<inbound>
<base />
<set-backend-service id="apim-generated-policy" backend-id="azfunc-fluffyoauth2" />
<rewrite-uri template="/WellKnownOpenidConfiguration" />
<cache-lookup vary-by-developer="false" vary-by-developer-groups="false" downstream-caching-type="none" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
<cache-store duration="36000" />
</outbound>
<on-error>
<base />
</on-error>
</policies>
Я вижу, что кешированная версия возвращает двоичный файл, который, как мне кажется, сжат с помощью gzip. Это приводит к тому, что нижестоящий код, который ожидает, что это будет необработанный json, сломается. Этот ответ представляет собой документ об обнаружении соединений openid, и, по иронии судьбы, если я укажу на это в jwt-политике API Management, она тоже сломается.
i.e.
var auth0Domain = "https://apim-mycompany.azure-api.net/oauth2";
string responseString = null;
try
{
var url = $"{auth0Domain}/.well-known/openid-configuration-cached";
Console.WriteLine($"-------------------");
Console.WriteLine($"{url}");
var httpClient = new HttpClient();
var response = await httpClient.GetAsync(new Uri($"{auth0Domain}/.well-known/openid-configuration-cached"));
responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine($"-------------------");
Console.WriteLine($"{responseString}");
Console.WriteLine($"-------------------");
JsonConvert.DeserializeObject<OpenIdConnectConfiguration>(responseString);
}
catch (Exception ex)
{
Console.WriteLine($"Error:{ex.Message}");
Console.WriteLine($"-------------------");
return;
}
curl -I --location --request GET 'https://apim-fluffyoauth2.azure-api.net/oauth2/.well-known/openid-configuration-cached'
HTTP/1.1 200 OK
Cache-Control: no-store, must-revalidate, no-cache
Pragma: no-cache
Content-Length: 558
Content-Type: application/json; charset=utf-8
Content-Encoding: gzip
Expires: Tue, 14 Apr 2020 18:50:53 GMT
Vary: Accept-Encoding
Request-Context: appId=cid-v1:dfeba42c-e636-42bc-b501-7c77563c3e7b,appId=cid-v1:dfeba42c-e636-42bc-b501-7c77563c3e7b
Date: Tue, 14 Apr 2020 18:50:53 GMT
Вопросов):
Что делает политика кеширования?
Как я могу изменить ее, чтобы она по-прежнему кешировалась, но реагировала тем же, что и версия без кеширования?