asp.net-core - Identity4 反向通道注销 SSO/SLO 不适用于所有客户端
问题描述
我已经实现了反向通道注销并且 URL 正在调用所有客户端,但它不是从所有客户端注销
设想
- 客户端-A 登录
- 客户端-B登录
- 单击 Client-A 的注销按钮,重定向到身份服务器注销页面
- 为客户端 B 调用反向通道注销 URL
- 为客户端 A 调用反向通道注销 URL
- 检查身份服务器 --> 用户已经注销
- 输入 Client-A 的 URL,重定向到 Identity Server 进行登录
- 输入Client-B的URL,我可以查看(假设已经重定向到身份服务器bcos logout的登录页面)
注销代码
public async Task<IActionResult> Logout()
{
Console.WriteLine("** MVC2 logout " + DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff tt"));
var client = _httpClientFactory.CreateClient("IDPClient");
var discoveryDocumentResponse = await client.GetDiscoveryDocumentAsync();
if (discoveryDocumentResponse.IsError)
{
throw new Exception(discoveryDocumentResponse.Error);
}
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
await HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme);
return Redirect(discoveryDocumentResponse.EndSessionEndpoint);
}
BackChannel 注销代码
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> BackChannelLogout(string token)
{
Console.WriteLine("*********************** MVC1 --> BackChannelLogout " + DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff tt"));
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
await HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme);
return NoContent();
}
我想实现,如果从客户端注销它,它应该重定向到身份服务器进行登录
解决方案
您客户端中的注销代码不应返回任何内容,因为这会干扰 SignOutAsync 在内部为您创建的响应。
示例注销可能如下所示:
/// <summary>
/// Do the logout
/// </summary>
/// <returns></returns>
[HttpPost]
[ValidateAntiForgeryToken]
public async Task Logout()
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
await HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme);
//Important, this method should never return anything.
}
推荐阅读
- android - 新的 Xamarin Forms 4.6 MediaElement 不适用于 Android
- c# - Blazor CascadingValue 以编程方式
- video - FFMpeg 将 .srt 文件作为 WebVTT 嵌入到 hls 流播放列表中
- java - 单例类的方法是线程安全的还是不是在方法内部使用共享资源?
- python - Python浮动给出奇怪的响应
- python - 为什么我收到此代码使用 plotly 绘制绘图的无效语法错误?
- python-3.x - Python pip:ImportError 无法从“六”导入名称“ensure_str”。在多个 pip 命令上
- ios - SwiftUI TextField 不接受整数/双精度数。怎么做?
- amazon-dynamodb - 如何在 DynamoDB 中对此建模?
- oracle - 错误:PLS-00103:遇到符号“CALL”错误:检查编译器日志