繁体   English   中英

如何在桌面应用程序中从Azure AD 2.0 / MSAL注销?

[英]How to sign out from Azure AD 2.0/MSAL in a desktop application?

我在WPF桌面应用程序中使用MSAL,该应用程序需要允许用户登录和注销Azure AD v2.0。 Microsoft的Graph访问示例和我看到的大多数其他示例都使用PublicClientApplication.Remove(IUser)注销,就像在这个函数中一样

//(from Microsoft's example)

/// <summary>
/// Sign out the current user
/// </summary>
private void SignOutButton_Click(object sender, RoutedEventArgs e)
{
    if (App.PublicClientApp.Users.Any())
    {
        try
        {
            App.PublicClientApp.Remove(App.PublicClientApp.Users.FirstOrDefault());
            this.ResultText.Text = "User has signed-out";
            this.CallGraphButton.Visibility = Visibility.Visible;
            this.SignOutButton.Visibility = Visibility.Collapsed;
        }
        catch (MsalException ex)
        {
            ResultText.Text = $"Error signing-out user: {ex.Message}";
        }
    }
}

从我所看到的,它看起来像Remove(IUser)删除该用户及其令牌的MSAL缓存,但它似乎并没有实际签署用户。 如果我再次尝试登录我的应用程序,我之前的用户将显示为“已登录”并单击将以该用户身份登录,而无需再次提供凭据。 使用Microsoft身份验证库(MSAL)时,注销不起作用让我觉得我需要手动注销,因为MSAL的当前状态。

我发现很多像这样的微软的网络应用程序教程,说退出应该涉及删除应用程序的本地记录(它看起来像Remove(IUser)正在做什么),还重定向到一些变体

GET https://login.microsoftonline.com/common/oauth2/v2.0/logout?post_logout_redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F

但我的应用程序不在Web浏览器中,因此我不确定该如何处理该请求。 使用MSAL时如何真正注销?

你是对的,Remove(IUser)方法只从缓存中删除用户。 我们还没有实现Signout方法,在您编写时,它会利用注销端点。 这是我们希望将来提供的。 请注意,有两种退出形式:从应用中退出,以及从设备注销。

要回答您的上一个问题,您的WPF应用程序确实不是Web浏览器,但它包含一个嵌入式Web浏览器,它保留会话cookie,需要通过向azure AD发送注销请求来清除它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM