Я использую IdentityServer4 с проектом QuickStart Брока Аллена на asp.netcore2.
Я на самом деле успешно разработал Saml SSO Idp. Часть Sign-on работает отлично.
Но для выхода из системы, поскольку у меня есть несколько поставщиков услуг, мне нужно получить ClientId или ClientName в контроллере действий Logout (чтобы вывести пользователя из нашего собственного приложения).
Поэтому я пытаюсь использовать IIdentityServerInteractionService, который вводится в контроллер.
LogoutRequest logoutRequest = _interaction.GetLogoutContextAsync(logoutId).Result;
Но вот что я получаю в logoutRequest:
запрос на выход из системы без clientId или clientName
Я знаю, что ClientIds содержит искомый ClientId, но поскольку он также принимает все идентификаторы других подключенных поставщиков услуг, я не могу его использовать.
Я использовал Fiddler, чтобы посмотреть, что происходит за всем этим, и похоже, что в запросе на выход, который SP посылает, нет Самла, я не прав?
Я видел много людей, которые успешно использовали LogoutRequest, но они в основном используют openId-connect.
Так что я предполагаю, что на моей стороне плохая конфигурация, или, может быть, Saml2 не подходит для этого?
Соединение с моей базой данных в порядке, клиенты отлично работают для единого входа, как я уже говорил.
Я на самом деле довольно новичок в ядре 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? И как я могу получить это?
Спасибо.