diff --git a/internal/config/constants.go b/internal/config/constants.go index 207641533..52406586d 100644 --- a/internal/config/constants.go +++ b/internal/config/constants.go @@ -83,3 +83,11 @@ const ( EnvRegion = "MINIO_REGION" // legacy EnvRegionName = "MINIO_REGION_NAME" // legacy ) + +// Expiration Token durations +// These values are used to validate the expiration time range from +// either the exp claim or MINI_STS_DURATION value +const ( + MinExpiration = 900 + MaxExpiration = 31536000 +) diff --git a/internal/config/identity/openid/jwt.go b/internal/config/identity/openid/jwt.go index b28eccb81..0eb3b5eed 100644 --- a/internal/config/identity/openid/jwt.go +++ b/internal/config/identity/openid/jwt.go @@ -114,8 +114,7 @@ func updateClaimsExpiry(dsecs string, claims map[string]interface{}) error { return nil } - expAt, err := auth.ExpToInt64(expStr) - if err != nil { + if _, err := auth.ExpToInt64(expStr); err != nil { return err } @@ -124,13 +123,6 @@ func updateClaimsExpiry(dsecs string, claims map[string]interface{}) error { return err } - // Verify if JWT expiry is lesser than default expiry duration, - // if that is the case then set the default expiration to be - // from the JWT expiry claim. - if time.Unix(expAt, 0).UTC().Sub(time.Now().UTC()) < defaultExpiryDuration { - defaultExpiryDuration = time.Unix(expAt, 0).UTC().Sub(time.Now().UTC()) - } // else honor the specified expiry duration. - claims["exp"] = time.Now().UTC().Add(defaultExpiryDuration).Unix() // update with new expiry. return nil } diff --git a/internal/config/identity/openid/openid.go b/internal/config/identity/openid/openid.go index 0f0baad04..523891fd8 100644 --- a/internal/config/identity/openid/openid.go +++ b/internal/config/identity/openid/openid.go @@ -603,9 +603,9 @@ func GetDefaultExpiration(dsecs string) (time.Duration, error) { timeout := env.Get(config.EnvMinioStsDuration, "") defaultExpiryDuration, err := time.ParseDuration(timeout) if err != nil { - defaultExpiryDuration = time.Duration(60) * time.Minute + defaultExpiryDuration = time.Hour } - if dsecs != "" { + if timeout == "" && dsecs != "" { expirySecs, err := strconv.ParseInt(dsecs, 10, 64) if err != nil { return 0, auth.ErrInvalidDuration @@ -614,11 +614,18 @@ func GetDefaultExpiration(dsecs string) (time.Duration, error) { // The duration, in seconds, of the role session. // The value can range from 900 seconds (15 minutes) // up to 365 days. - if expirySecs < 900 || expirySecs > 31536000 { + if expirySecs < config.MinExpiration || expirySecs > config.MaxExpiration { return 0, auth.ErrInvalidDuration } defaultExpiryDuration = time.Duration(expirySecs) * time.Second + } else if timeout == "" && dsecs == "" { + return time.Hour, nil } + + if defaultExpiryDuration.Seconds() < config.MinExpiration || defaultExpiryDuration.Seconds() > config.MaxExpiration { + return 0, auth.ErrInvalidDuration + } + return defaultExpiryDuration, nil }