Настройка TOTP
Stronghold поддерживает проверку дополнительного фактора при аутентификации с использованием Time-Based One-Time Password (TOTP) - одноразовых короткоживущих кодов. Проверка TOTP может быть установлена как для конкретного пользователя, так и для метода аутентификации целиком, в том числе принудительно.
Потребуется включить метод MFA TOTP и получить его идентификатор:
TOTP_METHOD_ID=$(d8 stronghold write identity/mfa/method/totp \
-format=json \
generate=true \
issuer=MyTOTP \
period=30 \
key_size=30 \
algorithm=SHA256 \
digits=6 | jq -r '.data.method_id')
echo $TOTP_METHOD_ID
Если администратору требуется включить (или пересоздать) TOTP MFA для конкретного пользователя, потребуется указать его идентификатор:
ENTITY_ID="f0075fa0-89ca-6235-5b90-b4420134cd36"
После чего сгенерировать QR-код для настройки OTP:
d8 stronghold write -field=barcode \
/identity/mfa/method/totp/admin-generate \
method_id=$TOTP_METHOD_ID entity_id=$ENTITY_ID \
| base64 -d > /tmp/qr-code.png
Если у пользователя есть доступ к эндпойнту identity/mfa/method/totp/generate
,
тогда пользователь сам сможет получить настройки TOTP MFA через UI Stronghold,
используя этот идентификатор.
Включение MFA
В качестве примера разберём проверку MFA для метода аутентификации Userpass. Для начала потребуется идентификатор метода:
LDAP_ACCESSOR=$(d8 stronghold auth list -format=json \
--detailed | jq -r '."userpass/".accessor')
echo $LDAP_ACCESSOR
Включите MFA:
d8 stronghold write /identity/mfa/login-enforcement/userpass-totp-enforcement \
mfa_method_ids="$TOTP_METHOD_ID" \
auth_method_accessors=$LDAP_ACCESSOR
Выполните вход:
d8 stronghold login -method=userpass username=user password='My-Password-1234'
Initiating Interactive MFA Validation...
Enter the passphrase for methodID "22c35aa4-bf37-cf31-4187-c5a676c19aca" of type "totp":
Чтобы отключить проверку MFA, выполните:
d8 stronghold delete identity/mfa/login-enforcement/userpass-totp-enforcement