mirror of
https://github.com/dani-garcia/vaultwarden.wiki.git
synced 2026-10-31 07:16:47 +02:00
Make 2FA remember duration configurable (#7421)
This commit is contained in:
3 files changed
+14
-1
No files matched your search
@@ -613,6 +613,9 @@
|
|||||||
## Note that the checkbox would still be present, but ignored.
|
## Note that the checkbox would still be present, but ignored.
|
||||||
# DISABLE_2FA_REMEMBER=false
|
# DISABLE_2FA_REMEMBER=false
|
||||||
##
|
##
|
||||||
|
## Number of days before a remembered 2FA login expires (min: 1, max: 90).
|
||||||
|
# TWO_FACTOR_REMEMBER_DAYS=30
|
||||||
|
##
|
||||||
## Authenticator Settings
|
## Authenticator Settings
|
||||||
## Disable authenticator time drifted codes to be valid.
|
## Disable authenticator time drifted codes to be valid.
|
||||||
## TOTP codes of the previous and next 30 seconds will be invalid
|
## TOTP codes of the previous and next 30 seconds will be invalid
|
||||||
|
|||||||
+5
-1
@@ -503,13 +503,17 @@ pub fn generate_2fa_remember_claims(device_uuid: DeviceId, user_uuid: UserId) ->
|
|||||||
let time_now = Utc::now();
|
let time_now = Utc::now();
|
||||||
TwoFactorRememberClaims {
|
TwoFactorRememberClaims {
|
||||||
nbf: time_now.timestamp(),
|
nbf: time_now.timestamp(),
|
||||||
exp: (time_now + TimeDelta::try_days(30).unwrap()).timestamp(),
|
exp: two_factor_remember_expiration(time_now, CONFIG.two_factor_remember_days()),
|
||||||
iss: JWT_2FA_REMEMBER_ISSUER.to_string(),
|
iss: JWT_2FA_REMEMBER_ISSUER.to_string(),
|
||||||
sub: device_uuid,
|
sub: device_uuid,
|
||||||
user_uuid,
|
user_uuid,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn two_factor_remember_expiration(time_now: DateTime<Utc>, remember_days: i64) -> i64 {
|
||||||
|
(time_now + TimeDelta::try_days(remember_days).expect("TWO_FACTOR_REMEMBER_DAYS is validated")).timestamp()
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub struct BasicJwtClaims {
|
pub struct BasicJwtClaims {
|
||||||
// Not before
|
// Not before
|
||||||
|
|||||||
@@ -736,6 +736,8 @@ make_config! {
|
|||||||
/// Disable Two-Factor remember |> Enabling this would force the users to use a second factor to login every time.
|
/// Disable Two-Factor remember |> Enabling this would force the users to use a second factor to login every time.
|
||||||
/// Note that the checkbox would still be present, but ignored.
|
/// Note that the checkbox would still be present, but ignored.
|
||||||
disable_2fa_remember: bool, true, def, false;
|
disable_2fa_remember: bool, true, def, false;
|
||||||
|
/// Two-Factor remember duration |> Number of days before a remembered Two-Factor login expires (min: 1, max: 90).
|
||||||
|
two_factor_remember_days: i64, true, def, 30;
|
||||||
|
|
||||||
/// Disable authenticator time drifted codes to be valid |> Enabling this only allows the current TOTP code to be valid
|
/// Disable authenticator time drifted codes to be valid |> Enabling this only allows the current TOTP code to be valid
|
||||||
/// TOTP codes of the previous and next 30 seconds will be invalid.
|
/// TOTP codes of the previous and next 30 seconds will be invalid.
|
||||||
@@ -1275,6 +1277,10 @@ fn validate_config(cfg: &ConfigItems, on_update: bool) -> Result<(), Error> {
|
|||||||
err!("`INVITATION_EXPIRATION_HOURS` has a minimum duration of 1 hour")
|
err!("`INVITATION_EXPIRATION_HOURS` has a minimum duration of 1 hour")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !(1..=90).contains(&cfg.two_factor_remember_days) {
|
||||||
|
err!("`TWO_FACTOR_REMEMBER_DAYS` must be between 1 and 90 days")
|
||||||
|
}
|
||||||
|
|
||||||
// Validate schedule crontab format
|
// Validate schedule crontab format
|
||||||
if !cfg.send_purge_schedule.is_empty() && cfg.send_purge_schedule.parse::<Schedule>().is_err() {
|
if !cfg.send_purge_schedule.is_empty() && cfg.send_purge_schedule.parse::<Schedule>().is_err() {
|
||||||
err!("`SEND_PURGE_SCHEDULE` is not a valid cron expression")
|
err!("`SEND_PURGE_SCHEDULE` is not a valid cron expression")
|
||||||
|
|||||||
Reference in new issue
Block a user