0

我们的 UWP 应用使用 Azure AD 进行身份验证。当我运行该应用程序时,系统提示我登录,我这样做了并且身份验证成功。现在我无法返回“退出”状态。每当我运行该应用程序时,我都会自动登录。我已经调用SignOutAsync()了 WebAccount,但它似乎没有任何效果。

首先,我称之为:

private async Task SignOutAccountAsync(WebAccount account)
{
    // remove local settings                
    ApplicationData.Current.LocalSettings.Values.Remove("CurrentUserWebAccountProviderId");
    ApplicationData.Current.LocalSettings.Values.Remove("CurrentUserWebAccountId");
    await account.SignOutAsync();                
}

然后我调用以下命令,它成功并让我登录而无需任何交互

WebTokenRequest wtr = new WebTokenRequest(wap, string.Empty, clientId);
wtrr = await WebAuthenticationCoreManager.RequestTokenAsync(wtr);

如何退出并强制用户重新对应用进行身份验证?

编辑:这是一个更具凝聚力的示例,我登录、注销、实例化所有用于登录的对象,然后再次登录。

// silent login
wtrr = await WebAuthenticationCoreManager.RequestTokenAsync(wtr);
userWebAccount = wtrr.ResponseData.First().WebAccount;

// sign out
await userWebAccount.SignOutAsync();

// use new objects to try again
wap = await WebAuthenticationCoreManager.FindAccountProviderAsync("https://login.microsoft.com", authority);
wtr = new WebTokenRequest(wap, string.Empty, clientId);
wtr.Properties.Add("resource", resource);

// silent login works again, despite having called SignOutAsync().
wtrr = await WebAuthenticationCoreManager.RequestTokenAsync(wtr);
4

1 回答 1

0

我认为您可能在这里遗漏了什么,您从本地设置中删除了值,但对象wapclientId仍然具有稍后用户可以登录的值。因此,请确保将这些变量保留在您所在的方法的本地登录,或者如果他们在课堂上,则在退出时将其清空。

private async Task SignOutAccountAsync(WebAccount account)
{
    // remove local settings                


 ApplicationData.Current.LocalSettings.Values.Remove("CurrentUserWebAccountProviderId");
    ApplicationData.Current.LocalSettings.Values.Remove("CurrentUserWebAccountId");
    wap = "";
    clientId = "";
    await account.SignOutAsync();                
}
于 2018-10-09T20:49:24.347 回答