.NET Core IdentityServer4 Null ClientId / ClientName в LogoutRequest (с использованием SAML2P) - PullRequest
0 голосов
/ 30 октября 2018

Я использую 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? И как я могу получить это?

Спасибо.

...