Extend the options with combination with login and select_account

This commit is contained in:
Zoltán Papp
2025-12-01 10:25:54 +01:00
parent 57e4d381ae
commit e2cb0a857c
3 changed files with 28 additions and 8 deletions

View File

@@ -104,9 +104,14 @@ func (p *PKCEAuthorizationFlow) RequestAuthInfo(ctx context.Context) (AuthFlowIn
oauth2.SetAuthURLParam("audience", p.providerConfig.Audience),
}
if !p.providerConfig.DisablePromptLogin {
if p.providerConfig.LoginFlag.HasPromptLogin() {
hasPromptLogin := p.providerConfig.LoginFlag.HasPromptLogin()
hasSelectAccount := p.providerConfig.LoginFlag.HasSelectAccount()
if hasPromptLogin && hasSelectAccount {
params = append(params, oauth2.SetAuthURLParam("prompt", "login select_account"))
} else if hasPromptLogin {
params = append(params, oauth2.SetAuthURLParam("prompt", "login"))
} else if p.providerConfig.LoginFlag.HasSelectAccount() {
} else if hasSelectAccount {
params = append(params, oauth2.SetAuthURLParam("prompt", "select_account"))
}

View File

@@ -15,8 +15,10 @@ import (
func TestPromptLogin(t *testing.T) {
const (
promptLogin = "prompt=login"
maxAge0 = "max_age=0"
promptLogin = "prompt=login"
promptSelectAccount = "prompt=select_account"
promptLoginSelectAccount = "prompt=login+select_account"
maxAge0 = "max_age=0"
)
tt := []struct {
@@ -35,6 +37,16 @@ func TestPromptLogin(t *testing.T) {
loginFlag: mgm.LoginFlagMaxAge0,
expect: maxAge0,
},
{
name: "Prompt select account",
loginFlag: mgm.LoginFlagSelectAccount,
expect: promptSelectAccount,
},
{
name: "Prompt login and select account",
loginFlag: mgm.LoginFlagLoginSelectAccount,
expect: promptLoginSelectAccount,
},
{
name: "Disable prompt login",
loginFlag: mgm.LoginFlagPromptLogin,

View File

@@ -10,7 +10,8 @@ package common
// | 1 | LoginFlagMaxAge0 | max_age=0 |
// | 2 | LoginFlagSelectAccount | prompt=select_account |
// | 3 | LoginFlagSelectAccountMaxAge0 | prompt=select_account & max_age=0 |
// | 4 | LoginFlagNone | (none) |
// | 4 | LoginFlagLoginSelectAccount | prompt=login select_account |
// | 5 | LoginFlagNone | (none) |
//
// # Behavior
//
@@ -26,7 +27,7 @@ package common
//
// | Use Case | Recommended Flag |
// |--------------------------------|---------------------------|
// | Default SSO behavior | LoginFlagNone (4) |
// | Default SSO behavior | LoginFlagNone (5) |
// | Multi-account environment | LoginFlagSelectAccount (2)|
// | Security-sensitive operations | LoginFlagPromptLogin (0) |
// | Multi-account + force reauth | LoginFlagSelectAccountMaxAge0 (3) |
@@ -41,13 +42,15 @@ const (
LoginFlagSelectAccount
// LoginFlagSelectAccountMaxAge0 adds prompt=select_account and max_age=0
LoginFlagSelectAccountMaxAge0
// LoginFlagLoginSelectAccount adds prompt=login select_account to the authorization request
LoginFlagLoginSelectAccount
// LoginFlagNone disables all login flags
LoginFlagNone
)
// HasPromptLogin returns true if prompt=login should be added
func (f LoginFlag) HasPromptLogin() bool {
return f == LoginFlagPromptLogin
return f == LoginFlagPromptLogin || f == LoginFlagLoginSelectAccount
}
// HasMaxAge0 returns true if max_age=0 should be added
@@ -57,5 +60,5 @@ func (f LoginFlag) HasMaxAge0() bool {
// HasSelectAccount returns true if prompt=select_account should be added
func (f LoginFlag) HasSelectAccount() bool {
return f == LoginFlagSelectAccount || f == LoginFlagSelectAccountMaxAge0
return f == LoginFlagSelectAccount || f == LoginFlagSelectAccountMaxAge0 || f == LoginFlagLoginSelectAccount
}