Identity Server 4外部IDP注销Tidyup

时间:2018-07-26 09:20:05

标签: single-sign-on openid identityserver4 openid-connect oidc

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

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

如果用户从我们自己的ID服务器注销(即ID服务器显示的注销页面具有内置的iframe以确保整理MVC应用程序),则此方法正常。对于外部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"
            };
        });

任何建议都会得到好评

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

在您的MVC应用中,在操作中使用以下代码,调用它以退出并清除应用cookie和ID服务器cookie。

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