Xamarin Forms Azure App Service ADAL 注销未按预期工作

Xamarin Forms Azure App Service ADAL Logout not working as expected

我们目前正在编写 Xamarin Forms Azure Mobile 应用程序,使用客户端流、AAD 身份验证、刷新令牌等。 其中大部分都按预期工作。但是,注销应用程序无法正常工作。它完成了 Android 和 iOS 的注销过程 - 但在重定向到登录屏幕后,点击登录将永远不会按预期提示用户使用 Microsoft 登录,它会直接将他们签回应用

添加一点背景知识,此应用程序已按照 Adrian Hall 的书实施,

当前 link: https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/

使用上述选项和配置。

我还通读了 Zumo(也是 Adrian Hall)关于此的 30 天博客,以及我可以在这里找到的每一篇 post 与此相关的文章。

我当前的注销代码如下:

public async Task LogoutAsync()
    {
        var loginProvider = DependencyService.Get<ILoginProvider>();
        client.CurrentUser = loginProvider.RetrieveTokenFromSecureStore();

        var authUri = new Uri($"{client.MobileAppUri}/.auth/logout");
        using (var httpClient = new HttpClient())
        {
            if (IsTokenExpired(client.CurrentUser.MobileServiceAuthenticationToken))
            {
                var refreshed = await client.RefreshUserAsync();
            }
            httpClient.DefaultRequestHeaders.Add("X-ZUMO-AUTH", client.CurrentUser.MobileServiceAuthenticationToken);
            await httpClient.GetAsync(authUri);
        }

        // Remove the token from the cache
        loginProvider.RemoveTokenFromSecureStore();

        //Remove the cookies from the device - so that the webview does not hold on to the originals
        DependencyService.Get<ICookieService>().ClearCookies();

        // Remove the token from the MobileServiceClient
        await client.LogoutAsync();
    }

据我所知,这包括我目前发现的所有内容——即调用 /.auth/logout 端点、在本地删除令牌、清除设备中的 cookie(当我们在内部登录时一个 webview),最后从 MobileServiceClient 调用 LogoutAsync() 方法。

我错过了什么吗?或者有没有办法强制退出这个环境?据我所知,您不能 "invalidate" OAuth 令牌,您必须等到它过期 - 但在我看来,/.auth/logout 端点应该在 Azure 环境中处理这个问题?虽然我只是不确定到什么程度。

感谢任何帮助。

We are currently writing a Xamarin Forms Azure Mobile application, using client flow, AAD authentication, refresh tokens etc. Most of this is working as expected. However, logging out of the application does not work properly.

我假设如果您使用服务器流通过 AAD 进行日志记录,注销处理可能会按预期进行。正如您所描述的那样,您使用了客户端流程,因为您已经清除了令牌的客户端缓存,我假设问题可能是由 LoginAsync 相关(ADAL 部分)逻辑代码引起的,您需要检查您的代码,或者您可以提供日志记录相关代码供我们缩小此问题。