Я использую Thinktecture AuthorizationServer (AS), и он отлично работает.
Я хотел бы написать собственное одностраничное приложение javascript, которое может вызывать WebAPI напрямую, однако неявный поток не предоставляет токен обновления.
Если вызов AJAX сделан, если токен истек, API отправит перенаправление на страницу входа, так как данные используют динамические всплывающие окна, это приведет к прерыванию пользователя.
Как Facebook или Stackoverflow делают это и все еще разрешают запуск javascript на странице для вызова API?
Предлагаемое решение
Является ли приведенный ниже сценарий разумным (если это можно сделать с помощью iframes):
Мой SPA направляет меня в AS, и я получаю токен от Implicit Flow. В пределах AS я нажимаю разрешать область Read data
и нажимаю Remember decision
, затем Allow
.
Так как я нажал кнопку Remember decision
, всякий раз, когда я нажимаю AS для токена, новый токен автоматически возвращается без необходимости входа в систему (я могу видеть файл cookie FedAuth, который помнит мое решение и полагает, что это позволяет это просто работать).
С моим SPA (ненадежным приложением) у меня нет токена обновления только токена доступа. Поэтому вместо этого я:
- Убедитесь, что пользователь вошел в систему и нажал кнопку "запомнить" (иначе iframe не будет работать)
- Вызовите WebAPI, если ответ 401 попробует и получит новый токен с помощью следующих шагов...
- У вас есть скрытый iframe на странице, который я установил для URL-адреса, чтобы получить новый токен доступа с сервера авторизации.
- Получить новый токен из хэш-фрагмента iframe, затем сохранить его в SPA и использовать для всех будущих запросов WebAPI.
Я думаю, у меня все еще будет неприятность, если файл cookie FedAuth будет украден.
Любой стандартный или рекомендуемый способ для вышеуказанного сценария?