如何从MSAL身份验证中注销?

时间:2019-11-28 04:24:43

标签: xamarin xamarin.forms xamarin.android msal

我正在处理xamarin表单,其中使用MSAL进行身份验证。现在,我要在用户单击退出后将其注销。为了注销,我写了以下代码

 foreach (var user in await App.PCA.GetAccountsAsync())
   {
      await App.PCA.RemoveAsync(user);
   }

上面的代码正在执行,没有任何问题,但是当我再次尝试登录时,并没有要求输入密码。我正在使用类似的依赖服务

从应用程序清除Cookie

在xamarin表单项目中创建了一个界面

public interface IAuthentication
{
    void ClearAllCookies();
}

在提供接口实现的android项目中

 public void ClearAllCookies()
{
    CookieManager.Instance.RemoveSessionCookie();
    CookieManager.Instance.RemoveAllCookie();
}

我正在像下面进行认证

在App.xamal.cs文件中

    public static IPublicClientApplication PCA = null;
    public static string ClientID = "xxxxxxxxxxxxxxxxxxxx";
    public static string[] Scopes = { "User.Read" };

    public App()
    {   
        PCA = PublicClientApplicationBuilder.Create(ClientID)
            .WithRedirectUri($"msal{ClientID}://auth")
            .Build();
        InitializeComponent();
    }

    //On login button click
    AuthenticationResult authResult = null;
    IEnumerable<IAccount> accounts = await App.PCA.GetAccountsAsync();

    try
    {
        IAccount firstAccount = accounts.FirstOrDefault();
        authResult = await App.PCA.AcquireTokenSilent(App.Scopes, firstAccount)
                                          .ExecuteAsync();
    }
    catch (MsalUiRequiredException)
    {
        try
        {
            authResult = await App.PCA.AcquireTokenInteractive(App.Scopes)
                                      .WithLoginHint(EmailId) //Here I am passing Email Id
                                      .WithParentActivityOrWindow(App.ParentWindow)
                                      .ExecuteAsync();
        }
        catch (Exception ex2)
        {
            await DisplayAlert("Acquire token interactive failed. See exception message for details: ", ex2.Message, "Dismiss");
        }
    }
    if (authResult != null)
    {
        var content = await GetHttpContentWithTokenAsync(authResult.AccessToken);
        await Navigation.PushModalAsync(new Dashboard.PartnerDashboard(content));                        
    }
}

再次清除后,无需输入密码。如果我卸载并重新安装该应用程序,则也不会要求输入密码。该如何解决?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用以下代码在MSAL中结算帐户吗?

public void ClearAllCookies(string authority)
{
  var authContext = new AuthenticationContext(authority);
  authContext.TokenCache.Clear();
  CookieManager.Instance.RemoveSessionCookie();
  CookieManager.Instance.RemoveAllCookie();
}

其中授权=“ https://login.windows.net/common”;

请在尝试验证代码运行之前尝试以下代码,以删除旧帐户。

   var authContext = new AuthenticationContext(authority);
   if(authContext.TokenCache.ReadItems().Any())
   {
    authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority,false, null); 
   }
相关问题