【问题标题】:Adal.js logging out without a redirectAdal.js 在没有重定向的情况下注销
【发布时间】:2015-10-20 21:48:42
【问题描述】:

在我们当前的 SPA 实施中,我们使用 adal.js 对 AzureAD 进行身份验证,并在成功身份验证后点击我们的 Web api 以获取授权数据。有几个极端情况下,获取授权数据调用可能会失败。在这种情况下,我们想清除由 adal.js 创建的状态/缓存。我尝试了一些事情,但我无法创建一个干净的状态。这是我尝试过的一些代码。

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

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

【问题讨论】:

    标签: javascript angularjs azure-active-directory adal adal.js


    【解决方案1】:

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

    但还有一点需要注意的是,这两种方法只是清除缓存/存储,它不会清除 azure ad 上的任何会话/cookie,如果你想清除它,那么内置的注销应该是要使用的那个。

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

    【讨论】:

    • 我正在使用内置注销来允许用户在正常情况下注销。但是在失败的情况下,我需要以编程方式进行。内置注销对我来说不是一个选项,因为会发生重定向。我已经尝试过 clearCache,但这并没有消除 cookie/会话状态。
    • clearCache 不会清除 cookie/会话状态,正如我所说,它只会清除本地存储/会话存储。 adal.js 不会为您提供这样做的方法。您可以尝试实现静默注销(可能使用 iframe,这将阻止 ux 显示),然后调用 clearCache 清除 localstorage/sessionstorage。
    【解决方案2】:

    您可以将 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
            );
    

    【讨论】:

    • Guilherme,我试图做的是不被重定向到 MS 令牌服务页面。接受的答案解释了如何使用 iframe 执行此操作。
    猜你喜欢
    • 2012-11-01
    • 1970-01-01
    • 2015-02-17
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多