Кэширование токенов AAD в лучших практиках APIM - PullRequest
0 голосов
/ 14 июля 2020

Мы запускаем веб-приложение, которое собирает данные от множества поставщиков (Graph, SharePoint, O365 и многие другие согласованные API на основе AAD.

Мы направляем вызовы в соответствующий восходящий поток в наших APIM. (Получите токен OBO и перенаправьте запрос в восходящий поток).

Мы ожидали, что обмен токенами AAD будет очень быстрым (~ 200 мс), но мы видим, что в среднем он занимает около 900 мс.

Поскольку запросы поступают из APIM (у которого нет кэша ADAL), несколько запросов от одного пользователя к одному восходящему потоку (например, Graph API) получают токен обмена (токен OBO) несколько раз (для каждого попадания api ).

Мы думаем о добавлении кеша Redis в APIM для кеширования токенов.

Прежде чем мы это сделаем, я хотел бы услышать от экспертов здесь:

  1. Как лучше всего оптимизировать выборку нескольких токенов OBO (например, есть ли способ получить более одного токена OBO - токен SharePoint, токен Graph и т. Д. c, в одном запросе к AAD. ?

  2. Каковы передовые методы кэширования токенов в APIM. Если мы добавим внешний кеш в APIM, какие еще меры безопасности следует развернуть.

  3. Есть ли какие-нибудь рекомендации по получению токена OBO в течение 200 мс?

Заранее спасибо

1 Ответ

1 голос
/ 17 июля 2020

Со стороны APIM могу ответить только №2.

Вам не нужно добавлять внешний кеш, APIM поставляется со встроенным кешем, просто используйте политики cache-store-value и cache-lookup-value для хранения и извлечения значения. Вы можете исследовать полученный токен (проанализировать его с помощью функции .AsJwt ()) и установить срок действия кеша на значение меньше, чем срок жизни токенов. Внешний кеш в APIm полезен, если вам нужно больше места для кеша или вы хотите заранее очистить его. Если используется внешний кеш, APIM будет использовать предоставленную строку подключения для подключения к внешнему экземпляру Redis по протоколу HTTPS.
...