Добавление нескольких Tenancys - PullRequest
1 голос
/ 13 мая 2019

Какой предпочтительный способ добавления нескольких клиентов в конфигурацию. У нас есть несколько клиентов, которым мы хотим использовать ADFS, поэтому у них разные конечные точки / метаданные.

В данный момент я пытался прочитать конфиги из БД при запуске, а затем для каждого зарегистрировать новую аутентификацию Saml12.

private static void AddSaml2Client(AuthenticationBuilder builder, DomainProvider provider, string Saml2LocalEndpoint)
        {            
            var settings = JsonHelpers.ParseJsonStringToObject<Saml2Setting>(provider.Settings);

            if (settings == null 
                || string.IsNullOrEmpty(settings.MetadataLocation) 
                || string.IsNullOrEmpty(settings.ProviderEndPoint))
            {
                Log.Error($"Missing or invalid settings for SAML2 client on {provider.DomainName}");
                return;
            }    

            builder.AddSaml2(provider.Name.Trim(), provider.Name.Trim(), options =>
            {
                options.SPOptions.EntityId = new EntityId(Saml2LocalEndpoint);


                options.IdentityProviders.Add(new IdentityProvider(
                    new EntityId(settings.ProviderEndPoint), options.SPOptions)
                {
                    MetadataLocation = settings.MetadataLocation,
                    LoadMetadata = settings.LoadMetadata,
                });
            });
        }

Когда я добавил в конфигурацию 2 разных клиента, один работает нормально, а другой возвращается с ошибкой unhanded exception has occurred: No Idp with entity id http://xxxxx not found

Есть пара битов, на которых я все еще немного размыт, когда вы устанавливаете SPOptions.EntityId, это должно быть моей конечной точкой (я полагаю, что это так) или клиентами.

Также при создании AddSaml2, на что ссылается схема, я не вижу этого ни в одной документации?

Спасибо

1 Ответ

1 голос
/ 13 мая 2019
  1. Если вы вызываете AddSaml2 несколько раз, вы добавляете несколько экземпляров обработчика Saml2.Каждый из них должен иметь уникальный ModulePath.Ошибка, которую вы видите с No Idp with entity id..., связана с этим.Первый обработчик выдает ошибку, потому что теперь нет другого обработчика, который знает этот Idp.Уникальные значения Modulepath решат эту проблему.
  2. SPOptions.EntityId - ваш идентификатор, для каждого экземпляра должен быть задан полный URL-адрес ModulePath.Обратите внимание, что логически вы создаете несколько SP Saml2 SP - по одному для каждого вызова AddSaml2, поэтому у каждого из них должны быть уникальные идентификаторы.
  3. Схема является стандартной базовой конструкцией asp.net.Также должен быть уникальным для каждого экземпляра.

Наконец, есть еще один вариант - использовать один вызов AddSaml2 и добавить несколько поставщиков удостоверений.Это объединит все разные Idps SAML2 в одну схему аутентификации.Но так как вы пометили вопрос с помощью IdentityServer4, я бы не рекомендовал его - IdSrv4 ожидает, что каждый отображаемый пользователем параметр аутентификации соответствует одной схеме.Так что оставайтесь с множественным кодом AddSaml2.Просто хотел упомянуть об этом, чтобы завершить пост.

...