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

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

Сообщение Anonymous »

Недавно я добавил пространство компонентов в свое веб-приложение на базе NetCore 9.0, чтобы облегчить единый вход.

Несколько дней оно работало нормально, затем я столкнулся с проблемой, когда «имя_конфигурации» становится пустым для нескольких запросов.

Это происходит с перерывами. После перезапуска пула приложений в IIS он снова начал работать нормально. Проблема повторилась через несколько дней снова.
Вот код ниже:

Значение параметра «ConfigurationName» отображается как пустое, поэтому мы получаем запись вручную, зарегистрированную в нашей базе данных.

«Неверная конфигурация».

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

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#»