mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-12 00:27:31 +00:00
feat: Lockout policy (#2121)
* feat: lock users if lockout policy is set * feat: setup * feat: lock user on password failes * feat: render error * feat: lock user on command side * feat: auth_req tests * feat: lockout policy docs * feat: remove show lockout failures from proto * fix: console lockout * feat: tests * fix: tests * unlock function * add unlock button * fix migration version * lockout policy * lint * Update internal/auth/repository/eventsourcing/eventstore/auth_request.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * fix: err message * Update internal/command/setup_step4.go Co-authored-by: Silvan <silvan.reusser@gmail.com> Co-authored-by: Max Peintner <max@caos.ch> Co-authored-by: Livio Amstutz <livio.a@gmail.com> Co-authored-by: Silvan <silvan.reusser@gmail.com>
This commit is contained in:
@@ -615,24 +615,24 @@ it impacts all organisations without a customised policy
|
||||
PUT: /policies/password/age
|
||||
|
||||
|
||||
### GetPasswordLockoutPolicy
|
||||
### GetLockoutPolicy
|
||||
|
||||
> **rpc** GetPasswordLockoutPolicy([GetPasswordLockoutPolicyRequest](#getpasswordlockoutpolicyrequest))
|
||||
[GetPasswordLockoutPolicyResponse](#getpasswordlockoutpolicyresponse)
|
||||
> **rpc** GetLockoutPolicy([GetLockoutPolicyRequest](#getlockoutpolicyrequest))
|
||||
[GetLockoutPolicyResponse](#getlockoutpolicyresponse)
|
||||
|
||||
Returns the password lockout policy defined by the administrators of ZITADEL
|
||||
Returns the lockout policy defined by the administrators of ZITADEL
|
||||
|
||||
|
||||
|
||||
GET: /policies/password/lockout
|
||||
GET: /policies/lockout
|
||||
|
||||
|
||||
### UpdatePasswordLockoutPolicy
|
||||
### UpdateLockoutPolicy
|
||||
|
||||
> **rpc** UpdatePasswordLockoutPolicy([UpdatePasswordLockoutPolicyRequest](#updatepasswordlockoutpolicyrequest))
|
||||
[UpdatePasswordLockoutPolicyResponse](#updatepasswordlockoutpolicyresponse)
|
||||
> **rpc** UpdateLockoutPolicy([UpdateLockoutPolicyRequest](#updatelockoutpolicyrequest))
|
||||
[UpdateLockoutPolicyResponse](#updatelockoutpolicyresponse)
|
||||
|
||||
Updates the default password lockout policy of ZITADEL
|
||||
Updates the default lockout policy of ZITADEL
|
||||
it impacts all organisations without a customised policy
|
||||
|
||||
|
||||
@@ -1681,6 +1681,23 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### GetLockoutPolicyRequest
|
||||
This is an empty request
|
||||
|
||||
|
||||
|
||||
|
||||
### GetLockoutPolicyResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| policy | zitadel.policy.v1.LockoutPolicy | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### GetLoginPolicyRequest
|
||||
This is an empty request
|
||||
|
||||
@@ -1793,23 +1810,6 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### GetPasswordLockoutPolicyRequest
|
||||
This is an empty request
|
||||
|
||||
|
||||
|
||||
|
||||
### GetPasswordLockoutPolicyResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| policy | zitadel.policy.v1.PasswordLockoutPolicy | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### GetPreviewLabelPolicyRequest
|
||||
This is an empty request
|
||||
|
||||
@@ -2924,6 +2924,28 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### UpdateLockoutPolicyRequest
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| max_password_attempts | uint32 | failed attempts until a user gets locked | |
|
||||
|
||||
|
||||
|
||||
|
||||
### UpdateLockoutPolicyResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| details | zitadel.v1.ObjectDetails | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### UpdateLoginPolicyRequest
|
||||
|
||||
|
||||
@@ -3022,29 +3044,6 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### UpdatePasswordLockoutPolicyRequest
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| max_attempts | uint32 | failed attempts until a user gets locked | |
|
||||
| show_lockout_failure | bool | If an error should be displayed during a lockout or not | |
|
||||
|
||||
|
||||
|
||||
|
||||
### UpdatePasswordLockoutPolicyResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| details | zitadel.v1.ObjectDetails | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### UpdatePrivacyPolicyRequest
|
||||
|
||||
|
||||
|
@@ -1926,64 +1926,64 @@ The password age policy is not used at the moment
|
||||
DELETE: /policies/password/age
|
||||
|
||||
|
||||
### GetPasswordLockoutPolicy
|
||||
### GetLockoutPolicy
|
||||
|
||||
> **rpc** GetPasswordLockoutPolicy([GetPasswordLockoutPolicyRequest](#getpasswordlockoutpolicyrequest))
|
||||
[GetPasswordLockoutPolicyResponse](#getpasswordlockoutpolicyresponse)
|
||||
|
||||
The password lockout policy is not used at the moment
|
||||
> **rpc** GetLockoutPolicy([GetLockoutPolicyRequest](#getlockoutpolicyrequest))
|
||||
[GetLockoutPolicyResponse](#getlockoutpolicyresponse)
|
||||
|
||||
|
||||
|
||||
GET: /policies/password/lockout
|
||||
|
||||
|
||||
### GetDefaultPasswordLockoutPolicy
|
||||
GET: /policies/lockout
|
||||
|
||||
> **rpc** GetDefaultPasswordLockoutPolicy([GetDefaultPasswordLockoutPolicyRequest](#getdefaultpasswordlockoutpolicyrequest))
|
||||
[GetDefaultPasswordLockoutPolicyResponse](#getdefaultpasswordlockoutpolicyresponse)
|
||||
|
||||
The password lockout policy is not used at the moment
|
||||
### GetDefaultLockoutPolicy
|
||||
|
||||
> **rpc** GetDefaultLockoutPolicy([GetDefaultLockoutPolicyRequest](#getdefaultlockoutpolicyrequest))
|
||||
[GetDefaultLockoutPolicyResponse](#getdefaultlockoutpolicyresponse)
|
||||
|
||||
|
||||
|
||||
GET: /policies/default/password/lockout
|
||||
|
||||
|
||||
### AddCustomPasswordLockoutPolicy
|
||||
GET: /policies/default/lockout
|
||||
|
||||
> **rpc** AddCustomPasswordLockoutPolicy([AddCustomPasswordLockoutPolicyRequest](#addcustompasswordlockoutpolicyrequest))
|
||||
[AddCustomPasswordLockoutPolicyResponse](#addcustompasswordlockoutpolicyresponse)
|
||||
|
||||
The password lockout policy is not used at the moment
|
||||
### AddCustomLockoutPolicy
|
||||
|
||||
> **rpc** AddCustomLockoutPolicy([AddCustomLockoutPolicyRequest](#addcustomlockoutpolicyrequest))
|
||||
[AddCustomLockoutPolicyResponse](#addcustomlockoutpolicyresponse)
|
||||
|
||||
|
||||
|
||||
POST: /policies/password/lockout
|
||||
|
||||
|
||||
### UpdateCustomPasswordLockoutPolicy
|
||||
POST: /policies/lockout
|
||||
|
||||
> **rpc** UpdateCustomPasswordLockoutPolicy([UpdateCustomPasswordLockoutPolicyRequest](#updatecustompasswordlockoutpolicyrequest))
|
||||
[UpdateCustomPasswordLockoutPolicyResponse](#updatecustompasswordlockoutpolicyresponse)
|
||||
|
||||
The password lockout policy is not used at the moment
|
||||
### UpdateCustomLockoutPolicy
|
||||
|
||||
> **rpc** UpdateCustomLockoutPolicy([UpdateCustomLockoutPolicyRequest](#updatecustomlockoutpolicyrequest))
|
||||
[UpdateCustomLockoutPolicyResponse](#updatecustomlockoutpolicyresponse)
|
||||
|
||||
|
||||
|
||||
PUT: /policies/password/lockout
|
||||
|
||||
|
||||
### ResetPasswordLockoutPolicyToDefault
|
||||
PUT: /policies/lockout
|
||||
|
||||
> **rpc** ResetPasswordLockoutPolicyToDefault([ResetPasswordLockoutPolicyToDefaultRequest](#resetpasswordlockoutpolicytodefaultrequest))
|
||||
[ResetPasswordLockoutPolicyToDefaultResponse](#resetpasswordlockoutpolicytodefaultresponse)
|
||||
|
||||
The password lockout policy is not used at the moment
|
||||
### ResetLockoutPolicyToDefault
|
||||
|
||||
> **rpc** ResetLockoutPolicyToDefault([ResetLockoutPolicyToDefaultRequest](#resetlockoutpolicytodefaultrequest))
|
||||
[ResetLockoutPolicyToDefaultResponse](#resetlockoutpolicytodefaultresponse)
|
||||
|
||||
|
||||
|
||||
DELETE: /policies/password/lockout
|
||||
|
||||
|
||||
DELETE: /policies/lockout
|
||||
|
||||
|
||||
### GetPrivacyPolicy
|
||||
@@ -2769,6 +2769,28 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### AddCustomLockoutPolicyRequest
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| max_password_attempts | uint32 | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### AddCustomLockoutPolicyResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| details | zitadel.v1.ObjectDetails | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### AddCustomLoginPolicyRequest
|
||||
|
||||
|
||||
@@ -2845,29 +2867,6 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### AddCustomPasswordLockoutPolicyRequest
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| max_attempts | uint32 | - | |
|
||||
| show_lockout_failure | bool | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### AddCustomPasswordLockoutPolicyResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| details | zitadel.v1.ObjectDetails | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### AddCustomPrivacyPolicyRequest
|
||||
|
||||
|
||||
@@ -3915,6 +3914,23 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### GetDefaultLockoutPolicyRequest
|
||||
This is an empty request
|
||||
|
||||
|
||||
|
||||
|
||||
### GetDefaultLockoutPolicyResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| policy | zitadel.policy.v1.LockoutPolicy | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### GetDefaultLoginPolicyRequest
|
||||
|
||||
|
||||
@@ -3988,23 +4004,6 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### GetDefaultPasswordLockoutPolicyRequest
|
||||
This is an empty request
|
||||
|
||||
|
||||
|
||||
|
||||
### GetDefaultPasswordLockoutPolicyResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| policy | zitadel.policy.v1.PasswordLockoutPolicy | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### GetDefaultPasswordResetMessageTextRequest
|
||||
|
||||
|
||||
@@ -4255,6 +4254,24 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### GetLockoutPolicyRequest
|
||||
This is an empty request
|
||||
|
||||
|
||||
|
||||
|
||||
### GetLockoutPolicyResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| policy | zitadel.policy.v1.LockoutPolicy | - | |
|
||||
| is_default | bool | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### GetLoginPolicyRequest
|
||||
|
||||
|
||||
@@ -4428,24 +4445,6 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### GetPasswordLockoutPolicyRequest
|
||||
This is an empty request
|
||||
|
||||
|
||||
|
||||
|
||||
### GetPasswordLockoutPolicyResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| policy | zitadel.policy.v1.PasswordLockoutPolicy | - | |
|
||||
| is_default | bool | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### GetPreviewLabelPolicyRequest
|
||||
This is an empty request
|
||||
|
||||
@@ -6529,6 +6528,23 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### ResetLockoutPolicyToDefaultRequest
|
||||
This is an empty request
|
||||
|
||||
|
||||
|
||||
|
||||
### ResetLockoutPolicyToDefaultResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| details | zitadel.v1.ObjectDetails | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### ResetLoginPolicyToDefaultRequest
|
||||
|
||||
|
||||
@@ -6580,23 +6596,6 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### ResetPasswordLockoutPolicyToDefaultRequest
|
||||
This is an empty request
|
||||
|
||||
|
||||
|
||||
|
||||
### ResetPasswordLockoutPolicyToDefaultResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| details | zitadel.v1.ObjectDetails | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### ResetPrivacyPolicyToDefaultRequest
|
||||
This is an empty request
|
||||
|
||||
@@ -7083,6 +7082,28 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### UpdateCustomLockoutPolicyRequest
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| max_password_attempts | uint32 | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### UpdateCustomLockoutPolicyResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| details | zitadel.v1.ObjectDetails | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### UpdateCustomLoginPolicyRequest
|
||||
|
||||
|
||||
@@ -7159,29 +7180,6 @@ This is an empty request
|
||||
|
||||
|
||||
|
||||
### UpdateCustomPasswordLockoutPolicyRequest
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| max_attempts | uint32 | - | |
|
||||
| show_lockout_failure | bool | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### UpdateCustomPasswordLockoutPolicyResponse
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| details | zitadel.v1.ObjectDetails | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### UpdateCustomPrivacyPolicyRequest
|
||||
|
||||
|
||||
|
@@ -36,6 +36,19 @@ title: zitadel/policy.proto
|
||||
|
||||
|
||||
|
||||
### LockoutPolicy
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| details | zitadel.v1.ObjectDetails | - | |
|
||||
| max_password_attempts | uint64 | - | |
|
||||
| is_default | bool | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### LoginPolicy
|
||||
|
||||
|
||||
@@ -98,20 +111,6 @@ title: zitadel/policy.proto
|
||||
|
||||
|
||||
|
||||
### PasswordLockoutPolicy
|
||||
|
||||
|
||||
|
||||
| Field | Type | Description | Validation |
|
||||
| ----- | ---- | ----------- | ----------- |
|
||||
| details | zitadel.v1.ObjectDetails | - | |
|
||||
| max_attempts | uint64 | - | |
|
||||
| show_lockout_failure | bool | - | |
|
||||
| is_default | bool | - | |
|
||||
|
||||
|
||||
|
||||
|
||||
### PrivacyPolicy
|
||||
|
||||
|
||||
|
@@ -37,6 +37,16 @@ The Login Policy defines how the login process should look like and which authen
|
||||
|
||||

|
||||
|
||||
## Lockout Policy
|
||||
|
||||
Define when a user should be blocked.
|
||||
|
||||
The following properties are possible:
|
||||
- Maximum Password Attempts: When the user has reached the maximum password attempts the user will be locked
|
||||
|
||||
If a user is locked, an administrator has to unlock it in the ZITADEL console
|
||||
|
||||
|
||||
### Multifactors / Second Factors
|
||||
|
||||
In the multifactors section you can configure what kind of multifactors should be allowed. For passwordless to work, it's required to enable U2F (Universial Second Factor) with PIN. There is no other option at the moment.
|
||||
|
Reference in New Issue
Block a user