2015-06-03 2 views
0

Мы распределенное приложение WebAPI, который использует OAuth маркер, выданный провайдером для связи с API, его длится в течение определенного периода времени,Стратегии маркера Освежающий OAuth в распределенном приложении

Мы думаем о хранении токен в хранилище данных и извлечение его перед вызовом api, а также служба фоновых окон, обновляющая токен каждые 1 час или около того.

Существуют ли проверенные образцы обновления токена в распределенном приложении?

Благодаря -nen

+0

Вы посмотрели на OWIN и создали токены OAuth и обновили токены? Вот хороший подход к обработке токенов обновления: http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web-api-2-owin/ –

ответ

0

Мы начинаем реализовывать что-то очень похожее. Для хранения токенов мы смотрим на кеш Redis. Таким образом, любое количество распределенных приложений может получить или обновить кеш при необходимости. Redis также можно масштабировать и распределять. Это устраняет необходимость в любой службе синхронизации и доступно с довольно простым интерфейсом для связи. Если какой-либо клиент читает истекший токен, он отвечает за удаление его из кеша (circuit breaker) и уведомление службы auth. У нас есть служба auth, которая отвечает за добавление в кеш. Он может либо обновить мертвый токен, либо просто игнорировать уведомление, если мы не хотим автоматического обновления. У нас пока нет полностью функциональных функций, но он идет хорошо.

+0

Несколько вопросов: 1) Предполагая, что передний конец распределен, в любой момент времени мы можем сказать, что у нас есть 2 или 3 передних конца, обращающихся к Redis, чтобы получить токен, предполагая, что все 3 получили токен и его срок действия, кто собирается его обновить ? все три? – user504839

+0

Все 3 получат истекший токен, все 3 отправят вызов Redis для удаления старого токена, и все 3 отправят уведомление для службы auth. Мы используем Azure Service Bus для обмена сообщениями. Теперь у клиентов есть несколько вариантов выбора. Они могут показать загрузчик в течение установленного времени, например, 2-3 секунды, а затем снова попробовать кеш. Если служба auth обновит токен, он будет там. Или клиент может просто очистить любое состояние, в котором он нуждается, и перенаправить пользователя на службу auth. Это более вероятно. Это похоже на MS и перенаправляет пользователя на login.live.com. – ManOVision

+0

Поскольку это использование Redis является простой парой ключ-значение, любой запрос на удаление ключа, которого нет, просто будет проигнорирован. С Service Bus мы игнорируем сообщения о дублировании, поэтому не беспокойтесь о службе auth, которая пытается обновить один и тот же токен много раз. Даже если дополнительное сообщение прошло, дополнительное обновление ничего не повредит. – ManOVision

Смежные вопросы