从 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);
我已将 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);