【问题标题】:Azure Active Directory Logout with ADAL library使用 ADAL 库的 Azure Active Directory 注销
【发布时间】:2015-11-17 07:43:08
【问题描述】:

我使用 Azure Active Directory 来保护我的 Web API,并在 Azure 管理门户中创建了一个本机应用程序。这个本机应用程序基本上是一个 MVC Web 应用程序,我使用 ADAL 库来获取令牌并使用该令牌调用 api。我用来获取令牌的代码如下所示:

AuthenticationContext ac = new AuthenticationContext(authority);
AuthenticationResult ar = ac.AcquireToken(resourceID, clientID, redirectURI);
string accessToken = ar.AccessToken;

现在我需要注销并切换到另一个用户,但系统会以某种方式记住用户凭据。我清除身份验证上下文中的令牌缓存并按如下方式发布注销 api 请求,其中 *** 是我的租户 ID。

//Log out after api call
ac.TokenCache.Clear();

string requestUrl = "https://login.windows.net/***/oauth2/logout";

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
var response = await client.SendAsync(request);

api调用成功,但注销无效。 我应该怎么做才能注销并切换到另一个用户?

【问题讨论】:

    标签: azure azure-active-directory adal


    【解决方案1】:

    您可以这样做以清除缓存:

            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.removeAllCookie();
            CookieSyncManager.getInstance().sync();
            mAuthContext.getCache().removeAll();
    

    【讨论】:

    • 这是解决方案的一部分,他们改变了从缓存中删除令牌的最后一部分:mAuthContext.getCache().clear(); 但这个解决方案确实有效!
    【解决方案2】:

    如果您的目标是让其他用户登录,则不必严格要求第一个用户从其与 Azure AD 的会话中注销。您可以在 AcquireToken 调用中传递 PrompBehavior.Always,这样您就可以保证以干净的凭据收集 UX 提示用户。 注意:如果您想从应用程序中擦除第一个用户的所有痕迹,您可以保留您拥有的缓存清理代码。 ADAL 允许您为多个用户保留令牌,因此如果您的应用程序作为多用户功能,这可能很有用 - 问题是,如果您这样做,在每个 AcquireToken 您还必须指定您想要哪个用户令牌for 或 ADAL 不知道返回哪一个。如果您一次不需要多个用户,缓存清理 + PromptBehavior.Always 仍然是最简单的路径。

    【讨论】:

    • 你能确认这目前有效吗?我使用带有 AD_PROMPT_ALWAYS 请求的 iOS ADAL 库。我无法使用任何其他用户登录,然后是我测试的第一个用户:(ADAL 错误:19,不同的用户已通过身份验证。状态:2)。 stackoverflow.com/questions/32312710/…
    • 已确认适用于 Android 库。
    【解决方案3】:

    我认为这行不通。您需要将用户重定向到注销 URL 才能进行注销。

    创建注销 URI 的方法如下:

    https://login.microsoftonline.com/{0}/oauth2/logout?post_logout_redirect_uri={1}

    地点:

    • {0} - Azure Active Directory 的完全限定名称,例如yourad.onmicrosoft.com 或租户 ID。
    • {1} - 用户在注销完成后必须重定向回的应用程序的 URL。这应该是正确的 URL 编码。

    【讨论】:

    • 我尝试在 iOS ADAL 中调用此注销,但这不足以防止帐户更改出现异常。有人使用 ADALiOS 和两个不同的帐户成功登录/注销吗?
    • 在移动应用的情况下。我需要做什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 2015-04-03
    • 2021-06-26
    • 2023-03-07
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多