mirror of
https://github.com/zitadel/zitadel.git
synced 2025-01-11 03:53:40 +00:00
fix: check if pw login allowed (#8584)
# Which Problems Are Solved When checking for the next step for the login UI and a user did not yet have an IdP linked, they would always be presented the password check screen, even if the local authentication was disabled. # How the Problems Are Solved - Correctly check the login policy for the `Allow Username Password` option - In case the user has no IdP linked yet, fallback to the organizations configuration (and redirect if possible) - the user can be auto-linked based on the username / email after successfully authenticating at the IdP # Additional Changes None # Additional Context - closes https://github.com/zitadel/zitadel/issues/5106 - closes https://github.com/zitadel/zitadel/issues/7502 (cherry picked from commit 650c21f18af91b0056f1e337e5d3aa21946e84b6)
This commit is contained in:
parent
3289698d4c
commit
1189a17b70
@ -1053,8 +1053,12 @@ func (repo *AuthRequestRepo) nextSteps(ctx context.Context, request *domain.Auth
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if (!isInternalLogin || len(idps.Links) > 0) && len(request.LinkingUsers) == 0 {
|
noLocalAuth := request.LoginPolicy != nil && !request.LoginPolicy.AllowUsernamePassword
|
||||||
step := repo.idpChecked(request, idps.Links, userSession)
|
if (!isInternalLogin || len(idps.Links) > 0 || noLocalAuth) && len(request.LinkingUsers) == 0 {
|
||||||
|
step, err := repo.idpChecked(request, idps.Links, userSession)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
if step != nil {
|
if step != nil {
|
||||||
return append(steps, step), nil
|
return append(steps, step), nil
|
||||||
}
|
}
|
||||||
@ -1254,20 +1258,29 @@ func (repo *AuthRequestRepo) firstFactorChecked(request *domain.AuthRequest, use
|
|||||||
return &domain.PasswordStep{}
|
return &domain.PasswordStep{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (repo *AuthRequestRepo) idpChecked(request *domain.AuthRequest, idps []*query.IDPUserLink, userSession *user_model.UserSessionView) domain.NextStep {
|
func (repo *AuthRequestRepo) idpChecked(request *domain.AuthRequest, idps []*query.IDPUserLink, userSession *user_model.UserSessionView) (domain.NextStep, error) {
|
||||||
if checkVerificationTimeMaxAge(userSession.ExternalLoginVerification, request.LoginPolicy.ExternalLoginCheckLifetime, request) {
|
if checkVerificationTimeMaxAge(userSession.ExternalLoginVerification, request.LoginPolicy.ExternalLoginCheckLifetime, request) {
|
||||||
request.IDPLoginChecked = true
|
request.IDPLoginChecked = true
|
||||||
request.AuthTime = userSession.ExternalLoginVerification
|
request.AuthTime = userSession.ExternalLoginVerification
|
||||||
return nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
selectedIDPConfigID := request.SelectedIDPConfigID
|
// use the explicitly set IdP first
|
||||||
if selectedIDPConfigID == "" {
|
if request.SelectedIDPConfigID != "" {
|
||||||
selectedIDPConfigID = userSession.SelectedIDPConfigID
|
return &domain.ExternalLoginStep{SelectedIDPConfigID: request.SelectedIDPConfigID}, nil
|
||||||
}
|
}
|
||||||
if selectedIDPConfigID == "" && len(idps) > 0 {
|
// reuse the previously used IdP from the session
|
||||||
selectedIDPConfigID = idps[0].IDPID
|
if userSession.SelectedIDPConfigID != "" {
|
||||||
|
return &domain.ExternalLoginStep{SelectedIDPConfigID: userSession.SelectedIDPConfigID}, nil
|
||||||
}
|
}
|
||||||
return &domain.ExternalLoginStep{SelectedIDPConfigID: selectedIDPConfigID}
|
// then use an existing linked IdP of the user
|
||||||
|
if len(idps) > 0 {
|
||||||
|
return &domain.ExternalLoginStep{SelectedIDPConfigID: idps[0].IDPID}, nil
|
||||||
|
}
|
||||||
|
// if the user did not link one, then just use one of the configured IdPs of the org
|
||||||
|
if len(request.AllowedExternalIDPs) > 0 {
|
||||||
|
return &domain.ExternalLoginStep{SelectedIDPConfigID: request.AllowedExternalIDPs[0].IDPConfigID}, nil
|
||||||
|
}
|
||||||
|
return nil, zerrors.ThrowPreconditionFailed(nil, "LOGIN-5Hm8s", "Errors.Org.IdpNotExisting")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (repo *AuthRequestRepo) mfaChecked(userSession *user_model.UserSessionView, request *domain.AuthRequest, user *user_model.UserView, isInternalAuthentication bool) (domain.NextStep, bool, error) {
|
func (repo *AuthRequestRepo) mfaChecked(userSession *user_model.UserSessionView, request *domain.AuthRequest, user *user_model.UserView, isInternalAuthentication bool) (domain.NextStep, bool, error) {
|
||||||
|
@ -538,6 +538,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
idpUserLinksProvider: &mockIDPUserLinks{},
|
idpUserLinksProvider: &mockIDPUserLinks{},
|
||||||
loginPolicyProvider: &mockLoginPolicy{
|
loginPolicyProvider: &mockLoginPolicy{
|
||||||
policy: &query.LoginPolicy{
|
policy: &query.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: database.Duration(10 * 24 * time.Hour),
|
PasswordCheckLifetime: database.Duration(10 * 24 * time.Hour),
|
||||||
SecondFactorCheckLifetime: database.Duration(18 * time.Hour),
|
SecondFactorCheckLifetime: database.Duration(18 * time.Hour),
|
||||||
@ -559,6 +560,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
args{&domain.AuthRequest{
|
args{&domain.AuthRequest{
|
||||||
Request: &domain.AuthRequestOIDC{},
|
Request: &domain.AuthRequestOIDC{},
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -783,7 +785,15 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
},
|
},
|
||||||
idpUserLinksProvider: &mockIDPUserLinks{},
|
idpUserLinksProvider: &mockIDPUserLinks{},
|
||||||
},
|
},
|
||||||
args{&domain.AuthRequest{UserID: "UserID", LoginPolicy: &domain.LoginPolicy{}}, false},
|
args{
|
||||||
|
&domain.AuthRequest{
|
||||||
|
UserID: "UserID",
|
||||||
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
},
|
||||||
[]domain.NextStep{&domain.PasswordStep{}},
|
[]domain.NextStep{&domain.PasswordStep{}},
|
||||||
nil,
|
nil,
|
||||||
},
|
},
|
||||||
@ -820,9 +830,22 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
ShowFailures: true,
|
ShowFailures: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
loginPolicyProvider: &mockLoginPolicy{
|
||||||
|
policy: &query.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
idpUserLinksProvider: &mockIDPUserLinks{},
|
idpUserLinksProvider: &mockIDPUserLinks{},
|
||||||
},
|
},
|
||||||
args{&domain.AuthRequest{UserID: "UserID", LoginPolicy: &domain.LoginPolicy{}}, false},
|
args{
|
||||||
|
&domain.AuthRequest{
|
||||||
|
UserID: "UserID",
|
||||||
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
},
|
||||||
[]domain.NextStep{&domain.InitUserStep{
|
[]domain.NextStep{&domain.InitUserStep{
|
||||||
PasswordSet: true,
|
PasswordSet: true,
|
||||||
}},
|
}},
|
||||||
@ -849,7 +872,16 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
},
|
},
|
||||||
idpUserLinksProvider: &mockIDPUserLinks{},
|
idpUserLinksProvider: &mockIDPUserLinks{},
|
||||||
},
|
},
|
||||||
args{&domain.AuthRequest{UserID: "UserID", LoginPolicy: &domain.LoginPolicy{PasswordlessType: domain.PasswordlessTypeAllowed}}, false},
|
args{
|
||||||
|
&domain.AuthRequest{
|
||||||
|
UserID: "UserID",
|
||||||
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
|
PasswordlessType: domain.PasswordlessTypeAllowed,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
},
|
||||||
[]domain.NextStep{&domain.PasswordlessRegistrationPromptStep{}},
|
[]domain.NextStep{&domain.PasswordlessRegistrationPromptStep{}},
|
||||||
nil,
|
nil,
|
||||||
},
|
},
|
||||||
@ -874,7 +906,15 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
},
|
},
|
||||||
idpUserLinksProvider: &mockIDPUserLinks{},
|
idpUserLinksProvider: &mockIDPUserLinks{},
|
||||||
},
|
},
|
||||||
args{&domain.AuthRequest{UserID: "UserID", LoginPolicy: &domain.LoginPolicy{PasswordlessType: domain.PasswordlessTypeAllowed}}, false},
|
args{
|
||||||
|
&domain.AuthRequest{
|
||||||
|
UserID: "UserID",
|
||||||
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
|
PasswordlessType: domain.PasswordlessTypeAllowed,
|
||||||
|
},
|
||||||
|
}, false,
|
||||||
|
},
|
||||||
[]domain.NextStep{&domain.PasswordlessStep{}},
|
[]domain.NextStep{&domain.PasswordlessStep{}},
|
||||||
nil,
|
nil,
|
||||||
},
|
},
|
||||||
@ -900,7 +940,15 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
},
|
},
|
||||||
idpUserLinksProvider: &mockIDPUserLinks{},
|
idpUserLinksProvider: &mockIDPUserLinks{},
|
||||||
},
|
},
|
||||||
args{&domain.AuthRequest{UserID: "UserID", LoginPolicy: &domain.LoginPolicy{PasswordlessType: domain.PasswordlessTypeAllowed}}, false},
|
args{
|
||||||
|
&domain.AuthRequest{
|
||||||
|
UserID: "UserID",
|
||||||
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
|
PasswordlessType: domain.PasswordlessTypeAllowed,
|
||||||
|
},
|
||||||
|
}, false,
|
||||||
|
},
|
||||||
[]domain.NextStep{&domain.PasswordlessStep{PasswordSet: true}},
|
[]domain.NextStep{&domain.PasswordlessStep{PasswordSet: true}},
|
||||||
nil,
|
nil,
|
||||||
},
|
},
|
||||||
@ -927,14 +975,18 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
orgViewProvider: &mockViewOrg{State: domain.OrgStateActive},
|
orgViewProvider: &mockViewOrg{State: domain.OrgStateActive},
|
||||||
idpUserLinksProvider: &mockIDPUserLinks{},
|
idpUserLinksProvider: &mockIDPUserLinks{},
|
||||||
},
|
},
|
||||||
args{&domain.AuthRequest{
|
args{
|
||||||
|
&domain.AuthRequest{
|
||||||
UserID: "UserID",
|
UserID: "UserID",
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
PasswordlessType: domain.PasswordlessTypeAllowed,
|
PasswordlessType: domain.PasswordlessTypeAllowed,
|
||||||
MultiFactors: []domain.MultiFactorType{domain.MultiFactorTypeU2FWithPIN},
|
MultiFactors: []domain.MultiFactorType{domain.MultiFactorTypeU2FWithPIN},
|
||||||
MultiFactorCheckLifetime: 10 * time.Hour,
|
MultiFactorCheckLifetime: 10 * time.Hour,
|
||||||
},
|
},
|
||||||
}, false},
|
},
|
||||||
|
false,
|
||||||
|
},
|
||||||
[]domain.NextStep{&domain.VerifyEMailStep{}},
|
[]domain.NextStep{&domain.VerifyEMailStep{}},
|
||||||
nil,
|
nil,
|
||||||
},
|
},
|
||||||
@ -954,7 +1006,15 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
orgViewProvider: &mockViewOrg{State: domain.OrgStateActive},
|
orgViewProvider: &mockViewOrg{State: domain.OrgStateActive},
|
||||||
idpUserLinksProvider: &mockIDPUserLinks{},
|
idpUserLinksProvider: &mockIDPUserLinks{},
|
||||||
},
|
},
|
||||||
args{&domain.AuthRequest{UserID: "UserID", LoginPolicy: &domain.LoginPolicy{}}, false},
|
args{
|
||||||
|
&domain.AuthRequest{
|
||||||
|
UserID: "UserID",
|
||||||
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
},
|
||||||
[]domain.NextStep{&domain.InitPasswordStep{}},
|
[]domain.NextStep{&domain.InitPasswordStep{}},
|
||||||
nil,
|
nil,
|
||||||
},
|
},
|
||||||
@ -986,6 +1046,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
UserID: "UserID",
|
UserID: "UserID",
|
||||||
SelectedIDPConfigID: "IDPConfigID",
|
SelectedIDPConfigID: "IDPConfigID",
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: false,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
}}, false},
|
}}, false},
|
||||||
[]domain.NextStep{&domain.ExternalLoginStep{SelectedIDPConfigID: "IDPConfigID"}},
|
[]domain.NextStep{&domain.ExternalLoginStep{SelectedIDPConfigID: "IDPConfigID"}},
|
||||||
@ -1020,6 +1081,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
args{&domain.AuthRequest{
|
args{&domain.AuthRequest{
|
||||||
UserID: "UserID",
|
UserID: "UserID",
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: false,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
}}, false},
|
}}, false},
|
||||||
[]domain.NextStep{&domain.ExternalLoginStep{SelectedIDPConfigID: "IDPConfigID"}},
|
[]domain.NextStep{&domain.ExternalLoginStep{SelectedIDPConfigID: "IDPConfigID"}},
|
||||||
@ -1054,6 +1116,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
SelectedIDPConfigID: "IDPConfigID",
|
SelectedIDPConfigID: "IDPConfigID",
|
||||||
Request: &domain.AuthRequestOIDC{},
|
Request: &domain.AuthRequestOIDC{},
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: false,
|
||||||
ExternalLoginCheckLifetime: 10 * 24 * time.Hour,
|
ExternalLoginCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
},
|
},
|
||||||
@ -1083,7 +1146,15 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
},
|
},
|
||||||
idpUserLinksProvider: &mockIDPUserLinks{},
|
idpUserLinksProvider: &mockIDPUserLinks{},
|
||||||
},
|
},
|
||||||
args{&domain.AuthRequest{UserID: "UserID", LoginPolicy: &domain.LoginPolicy{}}, false},
|
args{
|
||||||
|
&domain.AuthRequest{
|
||||||
|
UserID: "UserID",
|
||||||
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
},
|
||||||
[]domain.NextStep{&domain.PasswordStep{}},
|
[]domain.NextStep{&domain.PasswordStep{}},
|
||||||
nil,
|
nil,
|
||||||
},
|
},
|
||||||
@ -1117,6 +1188,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
SelectedIDPConfigID: "IDPConfigID",
|
SelectedIDPConfigID: "IDPConfigID",
|
||||||
Request: &domain.AuthRequestOIDC{},
|
Request: &domain.AuthRequestOIDC{},
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
ExternalLoginCheckLifetime: 10 * 24 * time.Hour,
|
ExternalLoginCheckLifetime: 10 * 24 * time.Hour,
|
||||||
},
|
},
|
||||||
@ -1149,6 +1221,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
&domain.AuthRequest{
|
&domain.AuthRequest{
|
||||||
UserID: "UserID",
|
UserID: "UserID",
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -1183,6 +1256,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
&domain.AuthRequest{
|
&domain.AuthRequest{
|
||||||
UserID: "UserID",
|
UserID: "UserID",
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -1219,6 +1293,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
UserID: "UserID",
|
UserID: "UserID",
|
||||||
SelectedIDPConfigID: "IDPConfigID",
|
SelectedIDPConfigID: "IDPConfigID",
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
ExternalLoginCheckLifetime: 10 * 24 * time.Hour,
|
ExternalLoginCheckLifetime: 10 * 24 * time.Hour,
|
||||||
@ -1256,6 +1331,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
&domain.AuthRequest{
|
&domain.AuthRequest{
|
||||||
UserID: "UserID",
|
UserID: "UserID",
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -1287,6 +1363,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
args{&domain.AuthRequest{
|
args{&domain.AuthRequest{
|
||||||
UserID: "UserID",
|
UserID: "UserID",
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -1319,6 +1396,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
args{&domain.AuthRequest{
|
args{&domain.AuthRequest{
|
||||||
UserID: "UserID",
|
UserID: "UserID",
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -1358,6 +1436,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
args{&domain.AuthRequest{
|
args{&domain.AuthRequest{
|
||||||
UserID: "UserID",
|
UserID: "UserID",
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -1397,6 +1476,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
UserID: "UserID",
|
UserID: "UserID",
|
||||||
Request: &domain.AuthRequestOIDC{},
|
Request: &domain.AuthRequestOIDC{},
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -1434,6 +1514,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
Prompt: []domain.Prompt{domain.PromptNone},
|
Prompt: []domain.Prompt{domain.PromptNone},
|
||||||
Request: &domain.AuthRequestOIDC{},
|
Request: &domain.AuthRequestOIDC{},
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -1471,6 +1552,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
Prompt: []domain.Prompt{domain.PromptNone},
|
Prompt: []domain.Prompt{domain.PromptNone},
|
||||||
Request: &domain.AuthRequestOIDC{},
|
Request: &domain.AuthRequestOIDC{},
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -1510,6 +1592,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
Prompt: []domain.Prompt{domain.PromptNone},
|
Prompt: []domain.Prompt{domain.PromptNone},
|
||||||
Request: &domain.AuthRequestOIDC{},
|
Request: &domain.AuthRequestOIDC{},
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -1550,6 +1633,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
Prompt: []domain.Prompt{domain.PromptNone},
|
Prompt: []domain.Prompt{domain.PromptNone},
|
||||||
Request: &domain.AuthRequestOIDC{},
|
Request: &domain.AuthRequestOIDC{},
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -1590,6 +1674,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
Prompt: []domain.Prompt{domain.PromptNone},
|
Prompt: []domain.Prompt{domain.PromptNone},
|
||||||
Request: &domain.AuthRequestOIDC{},
|
Request: &domain.AuthRequestOIDC{},
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
@ -1631,6 +1716,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
|
|||||||
Prompt: []domain.Prompt{domain.PromptNone},
|
Prompt: []domain.Prompt{domain.PromptNone},
|
||||||
Request: &domain.AuthRequestOIDC{},
|
Request: &domain.AuthRequestOIDC{},
|
||||||
LoginPolicy: &domain.LoginPolicy{
|
LoginPolicy: &domain.LoginPolicy{
|
||||||
|
AllowUsernamePassword: true,
|
||||||
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
SecondFactors: []domain.SecondFactorType{domain.SecondFactorTypeTOTP},
|
||||||
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
PasswordCheckLifetime: 10 * 24 * time.Hour,
|
||||||
SecondFactorCheckLifetime: 18 * time.Hour,
|
SecondFactorCheckLifetime: 18 * time.Hour,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user