Несколько дней все работало нормально, затем я столкнулся с проблемой, когда имя конфигурации становится пустым для нескольких запросов.
Это происходит с перерывами. После перезапуска пула приложений в IIS он снова начал работать нормально. Проблема повторилась через несколько дней снова.
Вот код: имя конфигурации paramValue возвращается пустым, поэтому мы получаем ошибку, которую вручную выбрасываем и регистрируем в нашей базе данных:
Неверная конфигурация ''
Код:
Код: Выделить всё
public override Task GetLocalServiceProviderConfigurationAsync(string configurationName)
{
if (int.TryParse(configurationName, out int clientID))
{
var samlConfig = _securityService.GetSAMLConfiguration(clientID);
/* rest of code */
}
else
{
throw new InvalidOperationException($“Invalid configuration ‘{configurationName}’.”);
}
}
Код для инициации единого входа:
Код: Выделить всё
private ActionResult SsoRedirect(IClient client)
{
string redirectUrl;
if (client.SsoProvider == SsoProvider.ComponentSpace)
{
_samlServiceProvider.SetConfigurationNameAsync(client.ID.ToString()).GetAwaiter().GetResult();
var relayState = System.Text.Json.JsonSerializer.Serialize(new SsoRelayState { ReturnUrl = authConfig.AssertionConsumerServiceUrl });
relayState = Convert.ToBase64String(Encoding.UTF8.GetBytes(relayState));
_samlServiceProvider.InitiateSsoAsync(relayState: relayState).GetAwaiter().GetResult();
redirectUrl = string.Empty;
return new EmptyResult();
}
}
- всегда имеет ненулевое значение, во время отладки я видел заполненное значение, это первичный ключ в нашей базе данных.
Код: Выделить всё
Client.ID - Однако это происходит не каждый раз. После обновления/перезапуска пула приложений в IIS проблема исчезает.
- Предполагал зарегистрировать поставщика услуг ISamlService в TransientScope, но внутренняя реализация AddSaml() уже позаботилась об этом
- — реализация AbstractSamlConfigurationResolver зарегистрирована как AddScoped(), непосредственно перед AddSaml()
Код: Выделить всё
SSOConfigurationResolver
Код: Выделить всё
_samlServiceProvider.SetConfigurationNameAsync(client.ID.ToString()).GetAwaiter().GetResult();
Мы не можем воспроизвести проблему в более низких средах.
Пожалуйста, помогите, спасибо
Подробнее здесь: https://stackoverflow.com/questions/798 ... getlocalsp
Мобильная версия