我将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?我怎么能得到它?
谢谢。