Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure active directory 无法使用其他帐户或“登录”;“使用其他帐户”;_Azure Active Directory_Msal - Fatal编程技术网

Azure active directory 无法使用其他帐户或“登录”;“使用其他帐户”;

Azure active directory 无法使用其他帐户或“登录”;“使用其他帐户”;,azure-active-directory,msal,Azure Active Directory,Msal,我正在尝试将Microsoft sso与Xamarin.Forms应用程序集成 我正在使用Microsoft.Identity.Client 4.7.1 我很难在同一台设备上使用不同的帐户登录,因为无论我做什么,似乎总是选择第一个帐户 用户A登录 用户A注销 用户B进入应用程序打开带有Microsoft登录页的webview,并提示“使用其他帐户”按钮,但即使在键入其帐户后,webview也会将其重定向回移动应用程序(用户A) 以下是处理登录和退出的代码: 私有IPPublicClient应用

我正在尝试将Microsoft sso与Xamarin.Forms应用程序集成

我正在使用Microsoft.Identity.Client 4.7.1

我很难在同一台设备上使用不同的帐户登录,因为无论我做什么,似乎总是选择第一个帐户

  • 用户A登录
  • 用户A注销
  • 用户B进入应用程序打开带有Microsoft登录页的webview,并提示“使用其他帐户”按钮,但即使在键入其帐户后,webview也会将其重定向回移动应用程序(用户A)
  • 以下是处理登录和退出的代码:

    
    私有IPPublicClient应用程序_publicClientApplication;
    公共服务()
    {
    _publicClientApplication=PublicClientApplicationBuilder.Create(Constants.MicrosoftAuthConstants.ClientId.Value)
    .WithAdfsAuthority(常数.MicrosoftAuthConstants.Authority.Value)
    .WithRedirectUri(常量.MicrosoftAuthConstants.RedirectUri.Value)
    .Build();
    }
    公共异步任务SignInAsync()
    {
    var authScopes=Constants.microsoftauthctants.Scopes.Value;
    AuthenticationResult authResult;
    尝试
    {
    //调用_publicClientApplication.AcquireTokenSilent
    authResult=等待GetAuthResultSilentlyAsync();
    }
    捕获(MsalUiRequiredException)
    {
    authResult=await\u publicClientApplication.AcquireTokenInteractive(authScopes)
    .WithParentActivityOrWindow(App.ParentWindow)
    .ExecuteAsync();
    }
    返回authResult.AccessToken;
    }
    私有异步任务GetCachedAccountAsync()=>(等待publicClientApplication.GetAccountsAsync()).FirstOrDefault();
    公共异步任务SignOutAsync()
    {
    var firstCachedAccount=await GetCachedAccountAsync();
    wait_publicClientApplication.RemoveAsync(firstCachedAccount);
    }
    

    一种解决方法是使用
    提示符.ForceLogin
    ,但是如果每次都必须键入凭据,那么sso的意义何在。

    代码行
    等待_publicClientApplication.RemoveAsync(firstCachedAccount)
    jsut可以从缓存中删除用户,但它不实现签出方法。因此,您需要通过以下方式手动注销:


    我问了这个问题之后就用了这个。但对我来说有点奇怪,没有一个“真正的”注销方法。就我在他们发行的主要回购协议中所见,他们正在努力改进。我建议每个有类似问题的人都关注他们在Github上的回购协议。
    https://login.microsoftonline.com/common/oauth2/v2.0/logout?post_logout_redirect_uri=https://localhost/myapp/