Настройка TOTP

Stronghold поддерживает проверку дополнительного фактора при аутентификации с использованием Time-Based One-Time Password (TOTP) — одноразовых короткоживущих кодов. Проверка TOTP может быть установлена как для конкретного пользователя, так и для метода аутентификации целиком, в том числе принудительно.

Для настройки TOTP выполните следующие шаги:

  1. Включите метод 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
    
  2. Если необходимо включить (или пересоздать) TOTP MFA для конкретного пользователя, укажите его идентификатор:

    ENTITY_ID="f0075fa0-89ca-6235-5b90-b4420134cd36"
    
  3. Сгенерируйте 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 через веб-интерфейс Stronghold, используя указанный выше идентификатор.

Включение MFA

В качестве примера разберём проверку MFA для метода аутентификации Userpass.

  1. Получите идентификатор метода:

    LDAP_ACCESSOR=$(d8 stronghold auth list -format=json \
        --detailed | jq -r '."userpass/".accessor')
    echo $LDAP_ACCESSOR
    
  2. Включите MFA:

    d8 stronghold write /identity/mfa/login-enforcement/userpass-totp-enforcement \
        mfa_method_ids="$TOTP_METHOD_ID" \
        auth_method_accessors=$LDAP_ACCESSOR
    
  3. Выполните вход:

    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