Идентификационный сервер нескольких провайдеров - PullRequest
5 голосов
/ 18 апреля 2019

Привет, я пытаюсь добавить несколько провайдеров

public static AuthenticationBuilder AddIdentityProviders(this AuthenticationBuilder builder, IConfiguration configuration)
{
    var identityProvidersOptions = configuration.GetSection(identityProvidersSectionName)
                                                .Get<IdentityProviderOptions[]>();

    var ipFactory = new IdentityProviderControlFactory();

    foreach (var identityProvider in identityProvidersOptions)
    {
        if ( Enum.TryParse(identityProvider.Discriminator, out IdentityProviderTypes accessControlType) 
            && accessControlType != IdentityProviderTypes.None )
        {
            builder = ipFactory.GetIdentityProviderService(accessControlType)
                                .Register(builder, configuration, identityProvider);
        }
        else
        {
            throw new NotImplementedException();
        }
    }

    return builder;
}

в настройках у меня есть два провайдера, а затем для каждого «регистра» запускается метод:

AuthenticationBuilder Register(AuthenticationBuilder builder, IConfiguration configuration, IdentityProviderOptions identityProviderOptions)

, который внутри создаетсинглтон вот так:

builder.Services.AddSingleton<IConfigureOptions<OpenIdConnectOptions>, ConfigureAzureOptions>();
builder.AddOpenIdConnect(identityProviderOptions.Name, identityProviderOptions.Name, _ => { });

и в такие секунды

builder.Services.AddSingleton<IConfigureOptions<OpenIdConnectOptions>, ConfigureIBMOptions>();
builder.AddOpenIdConnect(identityProviderOptions.Name, identityProviderOptions.Name, _ => { });

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

Если я добавлю два идентификатора провайдера, я получу исключение

System.Security.Cryptography.CryptographicException: 'The payload was invalid.' 

1 Ответ

0 голосов
/ 23 апреля 2019

Я уже знаю, что это связано с CallbackPath и SignedOutCallbackPath, поскольку каждый провайдер должен быть разным, и сейчас я ищу способ переопределить эти конечные точки.

"Конкретные CallbackPath и SignedOutCallbackPath, которые вы настроите в целевом провайдере идентификации в качестве разрешенных сайтов. Поэтому, когда целевой провайдер идентификации отправляет обратно, он отправляет обратно по маршруту, который вы настроили в CallbackPath, и промежуточное ПО Oidc выберет правильную конфигурацию для вас. «

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...