我正在尝试获取有关发起注销的客户端的信息(例如 ClientId 和显示名称)。
但是我无法从请求中获取它。
这是客户端应用程序中的注销操作:
[Route("/logout")]
[HttpGet]
public IActionResult LogOut()
{
return SignOut(new AuthenticationProperties
{
RedirectUri = "/status"
}, CookieAuthenticationDefaults.AuthenticationScheme, OpenIdConnectDefaults.AuthenticationScheme);
}
从 OpenIddict 服务器中注销端点检索到的 HTTP 请求中,ClientId 为 null:
HttpContext.GetOpenIddictServerRequest().ClientId; // Null
但这些参数是随请求一起发送的:
post_logout_redirect_uri
、id_token_hint
、state
。
有没有办法在注销请求中包含 ClientId?在规范中(https://openid.net/specs/openid-connect-rpinitied-1_0.html#RPLogout)它是可选的,所以也许可以在某处启用/禁用它?
我的建议是使用 OpenIddict 客户端,它实现了 RP 发起的注销规范的最新草案,并将为您发送
client_id
参数。您可以在这里看到它的实际效果:https://github.com/openiddict/openiddict-samples/tree/dev/samples/Velusia/Velusia.Client
或者,如果您更喜欢使用 MSFT OIDC 处理程序,则可以使用其事件模型(更具体地说是
OpenIdConnectEvents.OnRedirectToIdentityProviderForSignOut
事件)来覆盖用户在触发注销时重定向到的 URL。