身份服务器 4 外部 IDP 注销整理

Identity Server 4 External IDP Signout Tidyup

我有 Identity Server 4 运行 可以为运行良好的 MVC 应用程序执行本地身份验证。我也需要添加对外部 IDP 的支持,所以我按照文档中的说明进行操作,并以快速入门代码为基础。因此,它当前配置为使用 https://demo.identityserver.io 的演示 IDP 作为外部 IDP,并且可以正常登录 - 用户被重定向到外部 IDP 以输入他们的详细信息,我的身份验证服务器返回一个 id_token我与我们自己的用户存储库中的用户匹配的用户 ID(主题)。然后,我们的身份验证服务器会按照正常情况继续登录并发出自己的令牌等。-到目前为止一切正常。

我遇到的问题是从外部 IDP 注销 - 如果用户直接从 demo.identityservier.io IDP 注销,我需要确保此过滤器返回以清除存储的身份验证 cookie,因此需要用户在尝试访问应用程序中的受保护页面时重新登录。

如果用户从我们自己的 ID Server 注销(即 ID Server 提供的注销页面具有确保 MVC 应用程序得到整理的内置 iframe),这将正常工作。对于外部 IDP,我希望有类似的东西,但看不到任何东西。

这是在本地 IDP 启动中注册外部 IDP 的启动配置。

        .AddOpenIdConnect("Ext_oidc", "Ext OpenID Connect", options =>
        {
            options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
            options.SignOutScheme = IdentityServerConstants.SignoutScheme;
            options.Authority = "https://demo.identityserver.io/";
            options.ClientId = "implicit";
            options.ResponseType = "id_token";
            options.TokenValidationParameters = new TokenValidationParameters
            {
                NameClaimType = "name",
                RoleClaimType = "role"
            };
        });

我们将不胜感激任何建议

在您的 MVC 应用程序中,在一个操作中使用以下代码调用它以注销并清除应用程序 cookie 和 ID 服务器 cookie。

Request.GetOwinContext().Authentication.SignOut(Request.GetOwinContext().Authentication.GetAuthenticationTypes()
            .Select(o => o.AuthenticationType).ToArray());

您是否向外部 IDP 提供了结束会话端点 URL?如果它被定义,我希望它作为外部 IDP 上显式注销过程的一部分被调用。