我遇到一个问题,我似乎无法让我的身份服务器注销以首先显示确认。我从github下载了IdentityServer4的源代码,在Models文件夹中找到了参数:LogoutRequest.cs、ShowSignOutPrompt。除了在注销期间检查之外,IdentityServer 中没有对其进行任何引用。
在调试中,我发现它是错误的。我不知道应该在哪里设置,我已经检查了服务器和客户端上的客户端配置选项,以及服务器启动的选项。
我在客户端代码中找不到“ShowSignoutPrompt”的实例(我当前使用的是 IdentityServer3 Owin 混合客户端示例)。
代码流程如下:我们的默认布局中有一个按钮,可以触发客户端的 AccountController.Signout():
public void Signout()
{
Request.GetOwinContext().Authentication.SignOut();
}
Run Code Online (Sandbox Code Playgroud)
从那里开始,我不太确定如何实现,但下一个点是 IdentityServer 的 AccountController.Logout(string logoutId)。该方法构建注销提示视图(使用 AccountServices.BuildLogoutViewModelAsync 中的检查)并将其返回到用户的浏览器。不将 ShowSignoutPrompt 设置为 false 的唯一正常工作方法是将 PostLogoutRedirectUri 设置为“/signout-callback-oidc”。我不知道为什么。
当用户在上面生成的视图上单击“yes”时,它将转到 IdSrvr 的 AccountController.Logout(LogoutInputModel model)。我正在尝试更改该方法的最后一行:
return View("LoggedOut", vm);
Run Code Online (Sandbox Code Playgroud)
到:
return Redirect(vm.PostLogoutRedirectUri);
Run Code Online (Sandbox Code Playgroud)
这里还有另一个问题,即使我在客户端配置上设置了 PostRedirectUri,这里的 PostRedirectUri 也是空的(好吧,就此而言,Identity Server 的客户端配置也有它)。