【问题标题】:Logout does not work when using Microsoft Authentication Library (MSAL)使用 Microsoft 身份验证库 (MSAL) 时注销不起作用
【发布时间】:2016-06-13 14:23:57
【问题描述】:

我有一个 Xamarin.Forms iOS/Android 应用程序,并且必须针对 Microsoft Azure B2C AD 对用户进行身份验证。

我已添加 Microsoft.Identity.Client NuGet 并将其用于身份验证。

登录正常,我可以使用返回的令牌调用我们自己的 Azure 托管服务。

问题是当我尝试注销用户时,它没有按预期工作。

如果用户在终止应用后立即注销,则下次启动应用时,登录屏幕将按预期显示。

要杀死 iOS 上的应用程序,我会通过双击主页按钮并向上滑动来打开应用程序切换器。

但是,如果用户没有杀死应用程序,而是按下我的登录按钮(触发对 AcquireTokenAsync() 的调用),Microsoft.Identity.Client 不会显示登录屏幕,而是立即返回一个有效令牌,并且应用程序能够将此令牌用于服务调用,即它是一个有效的令牌。

下次启动应用时,令牌不再存在,并且出现登录屏幕。

奇怪的是,当我从GitHub/active-directory-b2c-xamarin-native 运行示例时,我看到了相同的行为。所以我怀疑这是微软的 MSAL 组件中的一个错误。

根据示例注销应该简单地通过调用来完成

PublicClientApplication.UserTokenCache.Clear(PublicClientApplication.ClientId);

我也尝试过添加

foreach (var user in PublicClientApplication.Users)
{
     user.SignOut();
}

没有任何变化。

有什么建议吗?

【问题讨论】:

  • 我刚刚将 UiOptions 参数从 UiOptions.SelectAccount 更改为 UiOptions.ForceLoginAcquireTokenAsync(),这对用户来说有点不方便,但它确实可以确保显示登录屏幕。

标签: xamarin xamarin.forms azure-active-directory azure-ad-b2c msal


【解决方案1】:

只需在 Droid Project 中添加以下行:

CookieManager.Instance.RemoveAllCookie();

在 iOS 中,

 foreach (var cookie in NSHttpCookieStorage.SharedStorage.Cookies)
 {
   NSHttpCookieStorage.SharedStorage.DeleteCookie (cookie);
 }

更多详情请访问此链接https://developer.xamarin.com/guides/xamarin-forms/cloud-services/authentication/azure/

【讨论】:

  • 这是 2018 年的正确答案。我们将 Microsoft.IdentityModel.Clients.ActiveDirectory 从 3.13 更新到 3.19 并修复了注销问题
【解决方案2】:

发生这种情况是因为该服务不支持会导致用户退出的某些功能。这仍在进行中。

【讨论】:

  • 所以您是说实际上我无法退出用户,因为 MSAL 处于其当前的 alpha 状态?
  • 现在,是的。但这是我们希望早日支持的东西。
  • @KanishkPanwar-MSFT,它在 MSAL 级别或端点 v2 级别上不受支持吗?
猜你喜欢
  • 2020-11-30
  • 2021-08-03
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多