代码之家  ›  专栏  ›  技术社区  ›  Mark Bennetts

Identity Server 4外部IDP注销Tidyup

  •  0
  • Mark Bennetts  · 技术社区  · 7 年前

    我让Identity Server 4运行正常,可以为MVC应用程序执行本地身份验证。我还需要添加对外部IDP的支持,所以我遵循了文档中的说明并基于快速启动代码。所以它当前配置为在 https://demo.identityserver.io 作为一个外部IDP,可以很好地登录-用户被重定向到外部IDP以输入其详细信息,我的auth服务器将返回一个id_令牌,其中用户id(subject)与我们自己用户存储库中的用户匹配。然后,我们的认证服务器按照正常的方式继续登录,并发出自己的令牌等-目前为止一切正常。

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

    如果用户从我们自己的ID服务器注销(即,ID服务器提供的注销页面具有确保MVC应用程序得到整理的内置iframes),则此操作正常。对于外部的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 回复  |  直到 7 年前
        1
  •  2
  •   mackie    7 年前

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

        2
  •  0
  •   ElasticCode    7 年前

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

    Request.GetOwinContext().Authentication.SignOut(Request.GetOwinContext().Authentication.GetAuthenticationTypes()
                .Select(o => o.AuthenticationType).ToArray());
    
    推荐文章