Мы используем AWS SSO с TOTP через RADIUS. Наш RADIUS-сервер — это FreeRADIUS с linotp-auth-freeradius-perl.
Проблема в том, что соединение между AWS SSO и FreeRADIUS не совсем надежное — бывают периоды, когда между ними наблюдается значительная потеря пакетов.
RADIUS использует UDP, а это означает, что даже потеря одного обратного пакета может привести к сбою аутентификации. Затем через некоторое время AWS SSO пытается снова, но TOTP RFC запрещает использование одного и того же значения токена дважды, а первая попытка израсходовала TOTP.
Итак, есть много журналов, таких как:
24.05.2022 - 05:59:49 WARNI {140508089116416} [linotp.tokens.totptoken][checkOtp #429] [checkOTP] снова было использовано предыдущее значение OTP!
бывший счетчик токенов: 55112395, представленный счетчик 55112395
И многие пользователи не могут войти в AWS SSO даже с нескольких попыток.
Я ищу идеи о том, как повысить надежность этого.Я не смог найти способ заставить FreeRADIUS отправлять несколько ответных пакетов с некоторой задержкой (например, 10 пакетов каждую 1 секунду), что значительно уменьшило бы вероятность потери каждого ответного пакета.
Но, может быть, у ядра Linux есть способ дублировать такие ответные пакеты несколько раз с возрастающими задержками. Если есть, то как? При этом избегая повторного дублирования этих дубликатов, что, хотя и смешно об этом думать, скорее нежелательно…
Я не думаю, что AWS SSO поддерживает какой-либо другой протокол для использования TOTP, кроме RADIUS (с UDP), но я могу ошибаться. Пожалуйста, поправьте меня, если это так.