Skip to content

Commit 64883ea

Browse files
committed
feat: max_age is set during auth request to limit user session
Signed-off-by: Jorge Turrado <jorge.turrado@mail.schwarz>
1 parent 45b9020 commit 64883ea

File tree

5 files changed

+20
-7
lines changed

5 files changed

+20
-7
lines changed

internal/cmd/config/profile/import/template/profile.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"serverbackup_custom_endpoint": "",
2626
"service_account_custom_endpoint": "",
2727
"service_enablement_custom_endpoint": "",
28-
"session_time_limit": "2h",
28+
"session_time_limit": "12h",
2929
"ske_custom_endpoint": "",
3030
"sqlserverflex_custom_endpoint": "",
3131
"token_custom_endpoint": "",

internal/pkg/auth/auth.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,15 +110,23 @@ func GetAccessToken() (string, error) {
110110

111111
func getStartingSessionExpiresAtUnix() (string, error) {
112112
sessionStart := time.Now()
113-
sessionTimeLimitString := viper.GetString(config.SessionTimeLimitKey)
114-
sessionTimeLimit, err := time.ParseDuration(sessionTimeLimitString)
113+
sessionTimeLimit, err := getSessionExpiration()
115114
if err != nil {
116-
return "", fmt.Errorf("parse session time limit \"%s\": %w", sessionTimeLimitString, err)
115+
return "", err
117116
}
118117
sessionExpiresAt := sessionStart.Add(sessionTimeLimit)
119118
return strconv.FormatInt(sessionExpiresAt.Unix(), 10), nil
120119
}
121120

121+
func getSessionExpiration() (time.Duration, error) {
122+
sessionTimeLimitString := viper.GetString(config.SessionTimeLimitKey)
123+
duration, err := time.ParseDuration(sessionTimeLimitString)
124+
if err != nil {
125+
return 0, fmt.Errorf("parse session time limit \"%s\": %w", sessionTimeLimitString, err)
126+
}
127+
return duration, nil
128+
}
129+
122130
func getEmailFromToken(token string) (string, error) {
123131
// We can safely use ParseUnverified because we are not authenticating the user at this point,
124132
// We are parsing the token just to get the service account e-mail

internal/pkg/auth/user_login.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,13 @@ func AuthorizeUser(p *print.Printer, isReauthentication bool) error {
121121
// Initialize the code verifier
122122
codeVerifier := oauth2.GenerateVerifier()
123123

124+
// Generate max age based on the session time limit
125+
maxSessionDuration, err := getSessionExpiration()
126+
if err != nil {
127+
return err
128+
}
124129
// Construct the authorization URL
125-
authorizationURL := conf.AuthCodeURL("", oauth2.S256ChallengeOption(codeVerifier))
130+
authorizationURL := conf.AuthCodeURL("", oauth2.S256ChallengeOption(codeVerifier), oauth2.SetAuthURLParam("max_age", fmt.Sprintf("%d", int64(maxSessionDuration.Seconds()))))
126131

127132
// Start a web server to listen on a callback URL
128133
mux := http.NewServeMux()

internal/pkg/config/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ const (
5252

5353
AsyncDefault = false
5454
RegionDefault = "eu01"
55-
SessionTimeLimitDefault = "2h"
55+
SessionTimeLimitDefault = "12h"
5656

5757
AllowedUrlDomainDefault = "stackit.cloud"
5858
)

internal/pkg/config/template/test_profile.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"serverbackup_custom_endpoint": "",
2626
"service_account_custom_endpoint": "",
2727
"service_enablement_custom_endpoint": "",
28-
"session_time_limit": "2h",
28+
"session_time_limit": "12h",
2929
"ske_custom_endpoint": "",
3030
"sqlserverflex_custom_endpoint": "",
3131
"token_custom_endpoint": "",

0 commit comments

Comments
 (0)