ComponentSpace — SSO — ISamlServiceProvider.SamlState периодически пусто во время GetLocalSPConfigurationC#

Место общения программистов C#
Ответить
Anonymous
 ComponentSpace — SSO — ISamlServiceProvider.SamlState периодически пусто во время GetLocalSPConfiguration

Сообщение Anonymous »

Недавно я добавил пространство компонентов в свое веб-приложение на базе .NET 9.0, чтобы облегчить единый вход.
Несколько дней все работало нормально, затем я столкнулся с проблемой, когда имя конфигурации становится пустым для нескольких запросов.
Это происходит с перерывами. После перезапуска пула приложений в 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() уже позаботилась об этом
  • Код: Выделить всё

    SSOConfigurationResolver
    — реализация AbstractSamlConfigurationResolver зарегистрирована как AddScoped(), непосредственно перед AddSaml()
Я подозреваю

Код: Выделить всё

_samlServiceProvider.SetConfigurationNameAsync(client.ID.ToString()).GetAwaiter().GetResult();
Этот параметр следует использовать с await вместо GetAwaiter().
Мы не можем воспроизвести проблему в более низких средах.
Пожалуйста, помогите, спасибо

Подробнее здесь: https://stackoverflow.com/questions/798 ... getlocalsp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»