Adal.js 在没有重定向的情况下注销

Adal.js logging out without a redirect

在我们当前的 SPA 实施中,我们使用 adal.js 对 AzureAD 进行身份验证,并在身份验证成功后访问我们的网站 api 以获取授权数据。在一些极端情况下,获取授权数据调用可能会失败。在这种情况下,我们想清除由 adal.js 创建的 state/cache。我已经尝试了一些东西,但我无法创建一个干净的石板。这是我试过的一些代码。

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

我不想使用内置注销功能。调用注销会将用户重定向到 Azure 注销页面。 UX 非常奇怪,所以尽量避免它。

如果要清除adal创建的所有缓存条目,应该使用clearCache()方法,如果只想清除特定资源条目的缓存,则使用clearCacheForResource。

但是还有一点需要注意的是,这两种方法只能清除cache/storage,不会清除任何session/cookie hold on azure ad,如果你想清除那个,那么内置注销应该是要使用的注销。

您可以尝试实现静默注销(可能使用 iframe,这将阻止 ux 显示),然后调用 clearCache 清除 localstorage/sessionstorage

您可以将 postLogoutRedirectUri 设置为您的应用程序设置:

  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
        );