从 IdentityServer 注销不会关闭 webview 弹出窗口

Logging out from IdentityServer does not close the webview popup

我已将 IdentityModel.OidcClient 与 UWP 应用程序一起使用并连接到 Azure AD。登录 webview 打开并自动关闭,但注销弹出窗口不会自动关闭。

我的实现基于this。当注销发生时,最后的函数调用会在此处进行,但在手动关闭弹出窗口之前,执行会在此 AuthenticateAsync 函数调用中挂起。

if (string.Equals(options.EndUrl, WebAuthenticationBroker.GetCurrentApplicationCallbackUri().AbsoluteUri, StringComparison.Ordinal))
            {
                wabResult = await WebAuthenticationBroker.AuthenticateAsync(
                    wabOptions, new Uri(options.StartUrl));
                //Execution returns here, once the popup closes manually.
            }

正确注销,但弹出窗口仍然存在。 Post 注销 URL 也已正确配置。

找到答案了。 您需要设置 LogoutRequest 对象并从 LoginResult 对象设置 IdentityToken (来自 LoginAsync 函数的响应)并使用 LogoutAsync 发送它函数。

var logoutRequest = new LogoutRequest
{
     IdTokenHint = _result.IdentityToken,
     BrowserDisplayMode = DisplayMode.Visible
};
await oidcClient.LogoutAsync(logoutRequest);