Привет, я пытаюсь добавить несколько провайдеров
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.'