我遇到了一个问题,就是似乎无法让我的 Identity Server 注销显示确认提示。我从 Github 上下载了 IdentityServer4 的源代码,并在 Models 文件夹中找到了 LogoutRequest.cs 这个参数:ShowSignOutPrompt。在注销期间,IdentityServer 没有参考它。
在调试时,我发现它的值为 false。我不知道这个参数应该在哪里设置,我已经检查了服务器和客户端配置的选项,以及服务器启动时的选项。
我在客户端代码中找不到任何关于“ShowSignoutPrompt”的实例(我目前使用的是 IdentityServer3 Owin Hybrid 客户端示例)。
以下是代码流程: 我们在默认布局中有一个按钮,触发客户端的 AccountController.Signout():
public void Signout()
{
Request.GetOwinContext().Authentication.SignOut();
}
从那里开始,我不确定接下来是怎么做的,但接下来它会触发IdentityServer的AccountController.Logout(string logoutId)方法。该方法使用AccountServices.BuildLogoutViewModelAsync中的检查构建了注销提示视图,并将其返回给用户的浏览器。只有当PostLogoutRedirectUri设置为“/signout-callback-oidc”时,才能使ShowSignoutPrompt不被设置为false。我不知道为什么。
当用户在上面生成的视图上单击“yes”时,它会转到IdSrvr的AccountController.Logout(LogoutInputModel model)。我正在尝试更改该方法的最后一行,从:
return View("LoggedOut", vm);
to:
return Redirect(vm.PostLogoutRedirectUri);
这里还有一个问题,即使我在客户端配置中设置了PostRedirectUri(实际上,身份服务器的客户端配置也有它),但这里仍然是null。