.NET Core IdentityServer4空LogoutRequest中的ClientId / ClientName(使用SAML2P)

时间:2018-10-30 10:41:38

标签: asp.net-core single-sign-on identityserver4 saml-2.0 asp.net-core-2.1

我将IdentityServer4与Brock Allen在asp.netcore2上的QuickStart项目一起使用。 我实际上已经成功开发了Saml SSO Idp。登录部分可以完美运行。 但是对于注销,因为我有多个服务提供者,所以我需要在Logout操作控制器中获取ClientId或ClientName(以将用户从我们自己的应用程序中注销)。 因此,我尝试使用注入到控制器中的IIdentityServerInteractionService。

LogoutRequest logoutRequest = _interaction.GetLogoutContextAsync(logoutId).Result;

但这是我在logoutRequest中得到的:

logout request without clientId or clientName

我知道ClientIds包含我要查找的ClientId,但由于它也将所有其他连接的服务提供商ID放入其中,因此我无法使用它。

我已经使用Fiddler来查看所有这些背后的情况,并且看来SP发送的注销请求中没有任何Saml,对吗?

我见过许多成功使用LogoutRequest的人,但他们大多使用openId-connect。 所以我认为那边的配置不好,或者Saml2不合适吗?

与我的数据库的连接很好,正如我之前所说的,客户端可以完美地用于SSO部分。 实际上,我对asp.net内核还很陌生,如果感到困惑,请对不起。

这是我在启动文件中的Idsrv4配置:

services.AddDbContext(db =>
db.UseSqlServer(Configuration.GetConnectionString("ConnectionString"),
sql => sql.MigrationsAssembly(migrationsAssembly)));
services.AddScoped<ISamlConfigurationDbContext, SamlConfigurationDbContext>();

        services.AddIdentityServer()
            .AddSigningCredential(certificate)
            .AddConfigurationStore(options =>
            {
                options.ConfigureDbContext = builder =>
                    builder.UseSqlServer(Configuration.GetConnectionString("ConnectionString"),
                        sql => sql.MigrationsAssembly(migrationsAssembly));
            })
            .AddOperationalStore(options =>
            {
                options.ConfigureDbContext = builder =>
                    builder.UseSqlServer(Configuration.GetConnectionString("ConnectionString"),
                        sql => sql.MigrationsAssembly(migrationsAssembly));
            })
            .AddSamlPlugin(ConfigureSaml)
            .AddServiceProviderStore<ServiceProviderStore>()
            .AddProfileService<CustomProfileService>();

因此,总而言之,这是我的问题:为什么我不能获得ClientId / Name?我怎么能得到它?

谢谢。

0 个答案:

没有答案