2015-07-29 5 views
2

В нашей текущей реализации SPA мы аутентифицируем против AzureAD с помощью adal.js, и после успешной аутентификации удалите наш веб-api, чтобы получить данные авторизации. Существует несколько сценариев крайних случаев, когда запрос на получение данных авторизации может выйти из строя. В этом случае мы хотели бы очистить состояние/кеш, созданный adal.js. Я пробовал несколько вещей, но я не смог создать чистый список. Вот какой код я попробовал.Adal.js выходит без переадресации

localStorage.clear(); 
var authContext = AuthenticationContext.prototype._singletonInstance; 
authContext.clearCache(); 
authContext._user = null; 

Я не хочу использовать встроенную функцию выхода из системы. Вызов выхода из системы перенаправляет пользователя на страницу выхода Azure. UX довольно странный, поэтому он пытается избежать этого.

ответ

2

Если вы хотите очистить все записи кэша, созданные adal, следует использовать метод clearCache(), и если вы хотите очистить кеш только для определенной записи ресурса, используйте clearCacheForResource.

Но еще одно замечание заключается в том, что эти два метода только очищают кеш/хранилище, но он не очистит любой сеанс/файл cookie на лазурном объявлении, если вы хотите его очистить, тогда встроенный выход должен быть используемым.

Вы могли бы попытаться осуществить беззвучный выход из системы (вероятно, с помощью IFRAME, это предотвратит УБ от отображения), а затем вызвать ClearCache, чтобы очистить LocalStorage/sessionstorage

+0

Я использую встроенный выход, чтобы пользователь мог выйти из системы в обычном сценарии. Но в случае неудачного сценария мне нужно сделать это программно. Встроенный выход не подходит для меня, так как происходит перенаправление. Я пробовал clearCache, но это не уничтожает состояние cookie/session. – kolhapuri

+0

clearCache не уничтожит состояние cookie/сеанса, как я уже сказал, он очищает только локальный ресурс/sessionstorage. adal.js не предоставляет вам способ сделать это. Вероятно, вы могли бы попытаться реализовать молчащий выход (возможно, используя iframe, это предотвратит отображение ux), а затем вызовите clearCache, чтобы очистить localstorage/sessionstorage. –

0

Вы можете установить postLogoutRedirectUri вашей установки Aplication:

adalProvider.init(
     { 
      instance: 'https://login.microsoftonline.com/', 
      tenant: 'www.contoso.com', 
      clientId: '0101001010101', 
      extraQueryParameter: 'nux=1', 
      cacheLocation: 'localStorage', // enable this for IE, as sessionStorage does not work for localhost. 
      endpoints: endpoints, 
      postLogoutRedirectUri: 'https://www.yourapp.com' 
     }, 
     $httpProvider 
     ); 
+0

Guilherme, То, что я пытался сделать, это не перенаправлять на страницу службы маркеров MS. В принятом ответе объясняется, как это сделать, используя iframe. – kolhapuri