OpenKeel: the sovereign French Cloud solution of the inherent group, with a European reach Discover inherent

Reverse-spec · Services

keystone — Errors

Errors — keystone — branch stable/2026.2

Branch stable/2026.2 @ e6dc5ae079e6 — repository https://opendev.org/openstack/keystone — analysed on 2026-10-28

1. How an exception becomes an HTTP response

Unlike Placement, Keystone has a single central translation:

  • every subclass of keystone.exception.Error that has an HTTP code is registered automatically in KEYSTONE_API_EXCEPTIONS (keystone/exception.py:27-60);
  • each one is attached to the Flask handler _handle_keystone_exception (keystone/server/flask/application.py:126-173, registered at keystone/server/flask/application.py:202-203).

The handler:

  1. Special cases:
    • InsufficientAuthMethods → 401 with an auth receipt (keystone/receipt/handlers.py);
    • OAuth2Error → RFC 6749 body (keystone/oauth2/handlers.py);
    • RedirectRequired → 302 (WebSSO).
  2. Logging:
    • Unauthorized → WARNING "Authorization failed. <exception> from <remote_addr>", with the client address;
    • NotFound → DEBUG;
    • any other error → LOG.exception (stack trace).
  3. Body (status = the exception's code): json {"error": {"code": 404, "title": "Not Found", "message": "Could not find user: 6c3…"}} The message is translated according to Accept-Language (keystone/server/flask/application.py:113-123). For AuthPluginException (incomplete MFA, for example), error.identity lists the methods and their data.
  4. 401 responses add WWW-Authenticate: Keystone uri="<public base URL>" (keystone/server/flask/application.py:170-172).

Exceptions that are not Keystone exceptions:

  • TypeError becomes **400 ValidationError** (keystone/server/flask/application.py:176-183). This is what a client sees when it calls a member method on a collection path (REST API § 1).
  • Any other exception (SQL error, LDAP error, bug) escapes Flask and goes to the WSGI server: a 500 without a Keystone body [inferred: PROPAGATE_EXCEPTIONS=True, keystone/server/flask/application.py:218-221].
  • werkzeug exceptions (404 unknown route, 405 method not declared) get Flask's HTML body, not Keystone's JSON [inferred from Flask behaviour].

Message masking (SecurityError)

Unauthorized, Forbidden and UnexpectedError derive from SecurityError (keystone/exception.py:260-312). **The message passed at raise time is only shown if [DEFAULT]/insecure_debug = true.** Otherwise the client receives the class's generic template ("The request you have made requires authentication.", "You are not authorized to perform the requested action.", "An unexpected error prevented the server from fulfilling your request.").

Subclasses raised with named arguments (UserDisabled(user_id=…), AccountLocked(user_id=…), PasswordExpired(user_id=…), ForbiddenAction(action=…)) do show their template filled in, for example "The account is locked for user: 6c3….". Clients and operators can therefore tell the authentication failures apart, except bad credentials, which stay generic ("Invalid username or password" only with insecure_debug).

Database conflicts

@sql.handle_conflicts (34 driver methods) turns oslo.db's DBDuplicateEntry into **409 Conflict** "Duplicate entry found with name X at domain ID Y". The raw SQL is only logged at DEBUG (keystone/common/sql/core.py:567-610).

2. Statuses and situations that matter to clients

StatusMain exceptionsTypical situations
400ValidationError, SchemaValidationError, PasswordValidationError and its subclasses, AmbiguityError, CircularRegionHierarchyError, ApplicationCredentialValidationErrorbody that fails the JSON schema (keystone/*/schema.py); weak or reused password, or one changed too early; a name that exists in several domains ("use ID instead of names"); a cycle in the regions; remaining_uses ≤ 0 on a trust; a project under a disabled parent; an unknown Fernet payload version ("This is not a recognized Fernet payload version")
401Unauthorized, AccountLocked, UserDisabled, PasswordExpired, AuthMethodNotSupported, InsufficientAuthMethods, AdditionalAuthRequired, ReceiptNotFound, ApplicationCredentialAuthErrorbad password or credentials; locked account ([security_compliance]/lockout_*); disabled user; expired password (password_expires_days); unknown method in identity.methods; incomplete MFA (receipt); missing or invalid X-Auth-Token on an authenticated route (keystone/common/rbac_enforcer/enforcer.py:300-320); EC2 or S3 signature refused or expired timestamp; EC2 credential that is not a party to the trust (fix on this branch)
403ForbiddenAction, Forbidden, ForbiddenNotSecurity and its subclasses (ResourceUpdateForbidden, ResourceDeleteForbidden, CredentialLimitExceeded, ApplicationCredentialLimitExceeded, RegionDeletionError, RegisteredLimitError), TrustUseLimitReached, InvalidImpliedRole, DomainSpecificRoleMismatch, CrossBackendNotAllowed, InvalidDomainConfig, InvalidLimitpolicy refused ("You are not authorized to perform the requested action: identity:create_user."); a resource marked immutable; credential quota reached; a region that still has endpoints; trust re-delegation outside the rules; project tree too deep; a parent that cannot be disabled while its children are enabled; deleting a project that is not a leaf without cascade
404NotFound and its 25 subclasses, notably **TokenNotFound**unknown entity; any token that fails validation (expired, revoked, undecryptable, disabled user, access rules not supported by the middleware) is reported as TokenNotFound (keystone/token/provider.py:139-153)
405(werkzeug), exceptions.MethodNotAllowedGET on /v3/ec2tokens and /v3/s3tokens; methods other than POST on /v3/OS-OAUTH2/token
409Conflictduplicate name (user, project, role… within a domain); region ID already taken
410GoneOS-SIMPLE-CERT; OS-PKI/revoked when revoke_by_id = false
500UnexpectedError and its subclasses (KeysNotFound, SAMLSigningError, LDAPServerConnectionError, LDAPSizeLimitExceeded, MalformedEndpoint, MappedGroupNotFound…)Fernet key repository empty or unreadable (KeysNotFound, so every token issue or validation fails); xmlsec1 failure; LDAP unreachable; an endpoint URL with an unknown substitution; a mapping that points to a group that does not exist
501NotImplementedan operation the configured backend does not support (230 raise sites: the abstract methods of the drivers, LDAP being read-only, for example)

Traps for a client or a rewrite:

  • A token that fails validation is a 404, not a 401, while a bad X-Auth-Token on any other call is a 401. keystonemiddleware relies on this distinction.
  • **401 with a body that has an identity field**: incomplete MFA. The client must send the receipt back with the Openstack-Auth-Receipt header.
  • Auth errors stay generic unless insecure_debug is set: a rewrite must keep this masking, or it leaks whether an account exists.

3. Errors that never reach the client

SituationWhere it showsSource
Sending a notification fails (bus unreachable)LOG.exception "Failed to send … notification"; the API call still succeedskeystone/notifications.py:582-636, keystone/notifications.py:944-1020
The notifier cannot be created_notifier = False: no further notification is sent for the life of the processkeystone/notifications.py:487-506
A message template is missing an argumentWARNING "missing exception kwargs (programmer error)"; the raw template is returnedkeystone/exception.py:62-96
A disabled user's token is validatedWARNING "Unable to validate token because user … is disabled", then revocation of all their tokenskeystone/token/provider.py:218-229
A Fernet token is longer than max_token_sizeINFO "Fernet token created with length of …"keystone/token/token_formatters.py (create_token)
A cache entry that cannot be deserialisedCacheDeserializationError, treated as a cache miss [inferred]keystone/exception.py:810

4. Complete catalogue (109 classes)

Generated from keystone.exception (code, title and template read on the class). The raise sites are the raise exception.X lines outside tests (689 in all; the first three are shown).

ClassParentHTTPMessage templateDefined atRaise sites
ErrorException——keystone/exception.py:62keystone/assignment/backends/sql.py:262, keystone/common/json_home.py:87
ValidationErrorError400Expecting to find %(attribute)s in %(target)s. The server could not comply with the request since it is either malformed or otherwise incorrect. Th…keystone/exception.py:98keystone/token/token_formatters.py:90, keystone/token/token_formatters.py:232, keystone/identity/backends/ldap/common.py:1973 (+95)
URLValidationErrorValidationError400Cannot create an endpoint with an invalid URL: %(url)s.keystone/exception.py:109keystone/common/utils.py:481
PasswordValidationErrorValidationError400Password validation error: %(detail)s.keystone/exception.py:115keystone/common/password_hashers/scrypt.py:94, keystone/common/password_hashers/pbkdf2.py:93, keystone/common/password_hashers/bcrypt.py:124 (+2)
PasswordRequirementsValidationErrorPasswordValidationError400The password does not match the requirements: %(detail)s.keystone/exception.py:119keystone/common/validation/validators.py:41
PasswordHistoryValidationErrorPasswordValidationError400The new password cannot be identical to a previous password. The total number which includes the new password must be unique is %(unique_count)s.keystone/exception.py:125keystone/identity/backends/sql.py:304
PasswordAgeValidationErrorPasswordValidationError400You cannot change your password at this time due to the minimum password age. Once you change your password, it must be used for %(min_age_days)d d…keystone/exception.py:134keystone/identity/backends/sql.py:329
PasswordSelfServiceDisabledPasswordValidationError400You cannot change your password at this time due to password policy disallowing password changes. Please contact your administrator to reset your p…keystone/exception.py:145keystone/identity/backends/sql.py:315
SchemaValidationErrorValidationError400%(detail)skeystone/exception.py:154keystone/auth/schema.py:110, keystone/auth/schema.py:119, keystone/auth/schema.py:130 (+6)
ValidationTimeStampErrorError400Timestamp not in expected format. The server could not comply with the request since it is either malformed or otherwise incorrect. The client is a…keystone/exception.py:160keystone/identity/core.py:1253, keystone/common/utils.py:367
InvalidOperatorErrorValidationError400The given operator %(_op)s is not valid. It must be one of the following: 'eq', 'neq', 'lt', 'lte', 'gt', or 'gte'.keystone/exception.py:171keystone/identity/core.py:1258
ValidationExpirationErrorError400The 'expires_at' must not be before now. The server could not comply with the request since it is either malformed or otherwise incorrect. The clie…keystone/exception.py:179keystone/common/utils.py:369
StringLengthExceededValidationError400String length exceeded. The length of string '%(string)s' exceeds the limit of column %(type)s(CHAR(%(length)d)).keystone/exception.py:190keystone/common/sql/core.py:107
AmbiguityErrorValidationError400There are multiple %(resource)s entities named '%(name)s'. Please use ID instead of names to resolve the ambiguity.keystone/exception.py:198keystone/assignment/core.py:1482
ApplicationCredentialValidationErrorValidationError400Invalid application credential: %(detail)skeystone/exception.py:206keystone/api/users.py:734, keystone/api/users.py:818
CircularRegionHierarchyErrorError400The specified parent region %(parent_region_id)s would create a circular region hierarchy.keystone/exception.py:210keystone/catalog/backends/base.py:41
ForbiddenNotSecurityError403—keystone/exception.py:219keystone/application_credential/backends/sql.py:315, keystone/resource/core.py:81, keystone/resource/core.py:320 (+5)
PasswordVerificationErrorForbiddenNotSecurity403The password length must be less than or equal to %(size)i. The server could not comply with the request because the password is invalid.keystone/exception.py:231keystone/common/password_hashing.py:112
RegionDeletionErrorForbiddenNotSecurity403Unable to delete region %(region_id)s because it or its child regions have associated endpoints.keystone/exception.py:239keystone/catalog/backends/sql.py:167
ApplicationCredentialLimitExceededForbiddenNotSecurity403Unable to create additional application credentials, maximum of %(limit)d already exceeded for user.keystone/exception.py:246keystone/application_credential/core.py:100
CredentialLimitExceededForbiddenNotSecurity403Unable to create additional credentials, maximum of %(limit)d already exceeded for user.keystone/exception.py:253keystone/credential/core.py:95
SecurityErrorError——keystone/exception.py:260—
UnauthorizedSecurityError401The request you have made requires authentication.keystone/exception.py:314keystone/auth/plugins/totp.py:127, keystone/auth/plugins/mapped.py:484, keystone/auth/plugins/mapped.py:619 (+58)
InsufficientAuthMethodsError401Insufficient auth methods received for %(user_id)s. Auth Methods Provided: %(methods)s.keystone/exception.py:320keystone/api/_shared/authentication.py:254
ReceiptNotFoundUnauthorized401Could not find auth receipt: %(receipt_id)s.keystone/exception.py:338keystone/receipt/provider.py:109, keystone/receipt/provider.py:119, keystone/receipt/provider.py:151 (+3)
PasswordExpiredUnauthorized401The password is expired and needs to be changed for user: %(user_id)s.keystone/exception.py:342keystone/identity/backends/sql.py:78
AuthPluginExceptionUnauthorized401Authentication plugin error.keystone/exception.py:349—
UserDisabledUnauthorized401The account is disabled for user: %(user_id)s.keystone/exception.py:357keystone/token/provider.py:249, keystone/identity/backends/sql.py:76
AccountLockedUnauthorized401The account is locked for user: %(user_id)s.keystone/exception.py:361keystone/identity/backends/sql.py:71
AuthMethodNotSupportedAuthPluginException401Attempted to authenticate with an unsupported method.keystone/exception.py:365keystone/auth/core.py:63, keystone/auth/core.py:348
ApplicationCredentialAuthErrorAuthPluginException401Error authenticating with application credential: %(detail)skeystone/exception.py:373keystone/auth/core.py:282
AdditionalAuthRequiredAuthPluginException401Additional authentications steps required.keystone/exception.py:379keystone/api/_shared/authentication.py:199
ForbiddenSecurityError403You are not authorized to perform the requested action.keystone/exception.py:387keystone/identity/backends/ldap/core.py:159, keystone/identity/backends/ldap/core.py:170, keystone/identity/backends/ldap/core.py:173 (+25)
ForbiddenActionForbidden403You are not authorized to perform the requested action: %(action)s.keystone/exception.py:395keystone/identity/backends/ldap/common.py:1960, keystone/auth/plugins/token.py:74, keystone/auth/plugins/token.py:81 (+19)
CrossBackendNotAllowedForbidden403Group membership across backend boundaries is not allowed. Group in question is %(group_id)s, user is %(user_id)s.keystone/exception.py:401keystone/identity/core.py:1001
InvalidPolicyAssociationForbidden403Invalid mix of entities for policy association: only Endpoint, Service, or Region+Service allowed. Request was - Endpoint: %(endpoint_id)s, Service…keystone/exception.py:409keystone/endpoint_policy/core.py:71
InvalidDomainConfigForbidden403Invalid domain specific configuration: %(reason)s.keystone/exception.py:418keystone/resource/core.py:1240, keystone/resource/core.py:1251, keystone/resource/core.py:1296 (+7)
InvalidLimitForbidden403Invalid resource limit: %(reason)s.keystone/exception.py:422keystone/limit/models/strict_two_level.py:89, keystone/limit/models/strict_two_level.py:106, keystone/limit/models/strict_two_level.py:152 (+1)
LimitTreeExceedErrorException——keystone/exception.py:426keystone/resource/core.py:1142
NotFoundError404Could not find: %(target)s.keystone/exception.py:439keystone/identity/backends/ldap/core.py:151, keystone/identity/backends/ldap/common.py:1634, keystone/identity/backends/ldap/common.py:1648 (+11)
MarkerNotFoundNotFound404Marker %(marker)s could not be found.keystone/exception.py:445keystone/identity/backends/sql.py:199, keystone/identity/backends/sql.py:485, keystone/resource/backends/sql.py:90
EndpointNotFoundNotFound404Could not find endpoint: %(endpoint_id)s.keystone/exception.py:449keystone/catalog/backends/sql.py:251, keystone/catalog/core.py:232, keystone/catalog/core.py:239
PolicyNotFoundNotFound404Could not find policy: %(policy_id)s.keystone/exception.py:453keystone/policy/backends/sql.py:47
PolicyAssociationNotFoundNotFound404Could not find policy association.keystone/exception.py:457keystone/endpoint_policy/backends/sql.py:96, keystone/endpoint_policy/backends/sql.py:128
RoleNotFoundNotFound404Could not find role: %(role_id)s.keystone/exception.py:461keystone/auth/plugins/mapped.py:407, keystone/assignment/core.py:1476, keystone/assignment/role_backends/sql.py:64 (+3)
ImpliedRoleNotFoundNotFound404%(prior_role_id)s does not imply %(implied_role_id)s.keystone/exception.py:465keystone/assignment/role_backends/sql.py:114
InvalidImpliedRoleForbidden403%(role_id)s cannot be an implied roles.keystone/exception.py:469keystone/assignment/core.py:1553, keystone/assignment/core.py:1556
DomainSpecificRoleMismatchForbidden403Project %(project_id)s must be in the same domain as the role %(role_id)s being assigned.keystone/exception.py:473keystone/assignment/core.py:318
DomainSpecificRoleNotWithinIdPDomainForbidden403role: %(role_name)s must be within the same domain as the identity provider: %(identity_provider)s.keystone/exception.py:480keystone/auth/plugins/mapped.py:421
DomainIdInvalidValidationError400Domain ID does not conform to required UUID format.keystone/exception.py:487keystone/api/domains.py:177
RoleAssignmentNotFoundNotFound404Could not find role assignment with role: %(role_id)s, user or group: %(actor_id)s, project, domain, or system: %(target_id)s.keystone/exception.py:491keystone/assignment/backends/sql.py:140, keystone/assignment/backends/sql.py:166, keystone/assignment/backends/sql.py:400 (+2)
RegionNotFoundNotFound404Could not find region: %(region_id)s.keystone/exception.py:499keystone/catalog/backends/sql.py:116, keystone/catalog/core.py:109, keystone/catalog/core.py:120 (+1)
ServiceNotFoundNotFound404Could not find service: %(service_id)s.keystone/exception.py:503keystone/catalog/backends/sql.py:204, keystone/catalog/core.py:161, keystone/catalog/core.py:182
DomainNotFoundNotFound404Could not find domain: %(domain_id)s.keystone/exception.py:507keystone/identity/core.py:909, keystone/models/token_model.py:489, keystone/models/token_model.py:521 (+8)
ProjectNotFoundNotFound404Could not find project: %(project_id)s.keystone/exception.py:511keystone/auth/core.py:212, keystone/models/token_model.py:480, keystone/resource/backends/sql.py:44 (+2)
ProjectTagNotFoundNotFound404Could not find project tag: %(project_tag)s.keystone/exception.py:515keystone/resource/core.py:1075, keystone/resource/core.py:1133
TokenNotFoundNotFound404Could not find token: %(token_id)s.keystone/exception.py:519keystone/token/provider.py:143, keystone/token/provider.py:152, keystone/token/provider.py:214 (+7)
UserNotFoundNotFound404Could not find user: %(user_id)s.keystone/exception.py:523keystone/identity/shadow_backends/sql.py:160, keystone/identity/shadow_backends/sql.py:223, keystone/identity/shadow_backends/sql.py:243 (+3)
GroupNotFoundNotFound404Could not find group: %(group_id)s.keystone/exception.py:527keystone/identity/backends/sql.py:513, keystone/identity/backends/sql.py:528, keystone/identity/core.py:548
MappingNotFoundNotFound404Could not find mapping: %(mapping_id)s.keystone/exception.py:531keystone/federation/backends/sql.py:412
TrustNotFoundNotFound404Could not find trust: %(trust_id)s.keystone/exception.py:535keystone/trust/backends/sql.py:121, keystone/trust/backends/sql.py:166, keystone/trust/backends/sql.py:170 (+2)
TrustUseLimitReachedForbidden403No remaining uses for trust: %(trust_id)s.keystone/exception.py:539keystone/trust/backends/sql.py:149
CredentialNotFoundNotFound404Could not find credential: %(credential_id)s.keystone/exception.py:543keystone/credential/backends/sql.py:87
VersionNotFoundNotFound404Could not find version: %(version)s.keystone/exception.py:547—
EndpointGroupNotFoundNotFound404Could not find Endpoint Group: %(endpoint_group_id)s.keystone/exception.py:551keystone/catalog/backends/sql.py:451
IdentityProviderNotFoundNotFound404Could not find Identity Provider: %(idp_id)s.keystone/exception.py:555keystone/federation/backends/sql.py:313, keystone/federation/backends/sql.py:322
ServiceProviderNotFoundNotFound404Could not find Service Provider: %(sp_id)s.keystone/exception.py:559keystone/federation/backends/sql.py:481
FederatedProtocolNotFoundNotFound404Could not find federated protocol %(protocol_id)s for Identity Provider: %(idp_id)s.keystone/exception.py:563keystone/federation/backends/sql.py:362
PublicIDNotFoundNotFound404%(id)skeystone/exception.py:570keystone/identity/core.py:972
RegisteredLimitNotFoundNotFound404Could not find registered limit for %(id)s.keystone/exception.py:576keystone/limit/backends/sql.py:224
LimitNotFoundNotFound404Could not find limit for %(id)s.keystone/exception.py:580keystone/limit/backends/sql.py:305
NoLimitReferenceForbidden403Unable to create a limit that has no corresponding registered limit.keystone/exception.py:584keystone/limit/backends/sql.py:258, keystone/limit/backends/sql.py:282
RegisteredLimitErrorForbiddenNotSecurity403Unable to update or delete registered limit %(id)s because there are project limits associated with it.keystone/exception.py:590keystone/limit/backends/sql.py:174, keystone/limit/backends/sql.py:207, keystone/limit/backends/sql.py:240
DomainConfigNotFoundNotFound404Could not find %(group_or_option)s in domain configuration for domain %(domain_id)s.keystone/exception.py:597keystone/resource/config_backends/sql.py:96, keystone/resource/core.py:1450, keystone/resource/core.py:1592 (+3)
ConfigRegistrationNotFoundException——keystone/exception.py:604keystone/resource/config_backends/sql.py:165
ApplicationCredentialNotFoundNotFound404Could not find Application Credential: %(application_credential_id)s.keystone/exception.py:611keystone/application_credential/backends/sql.py:236, keystone/application_credential/backends/sql.py:259
AccessRuleNotFoundNotFound404Could not find Access Rule: %(access_rule_id)s.keystone/exception.py:617keystone/application_credential/backends/sql.py:179, keystone/application_credential/backends/sql.py:288, keystone/application_credential/backends/sql.py:310
ConflictError409Conflict occurred attempting to store %(type)s - %(details)s.keystone/exception.py:621keystone/cmd/idutils.py:111, keystone/identity/backends/ldap/core.py:208, keystone/identity/backends/ldap/core.py:414 (+10)
UnexpectedErrorSecurityError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:629keystone/identity/core.py:313, keystone/revoke/core.py:110, keystone/assignment/core.py:931 (+6)
TrustConsumeMaximumAttemptUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:656keystone/trust/backends/sql.py:157
MalformedEndpointUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:662keystone/common/utils.py:437, keystone/common/utils.py:442, keystone/common/utils.py:451 (+1)
MappedGroupNotFoundUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:668keystone/federation/utils.py:378
MetadataFileErrorUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:675keystone/api/os_federation.py:511
DirectMappingErrorUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:679keystone/federation/utils.py:813
AssignmentTypeCalculationErrorUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:687keystone/assignment/backends/sql.py:40
NotImplementedError501The action you have requested has not been implemented.keystone/exception.py:695keystone/token/providers/base.py:53, keystone/token/providers/base.py:65, keystone/credential/backends/base.py:34 (+227)
GoneError410The service you have requested is no longer available on this server.keystone/exception.py:703keystone/api/auth.py:270, keystone/api/os_simple_cert.py:32, keystone/api/os_simple_cert.py:43
ServiceUnavailableError503The server is currently unable to handle the request due to misconfiguration or maintenance.keystone/exception.py:711—
ConfigFileNotFoundUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:720—
KeysNotFoundUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:726keystone/token/token_formatters.py:63, keystone/receipt/receipt_formatters.py:65
MultipleSQLDriversInConfigUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:733keystone/identity/core.py:127, keystone/identity/core.py:303
MigrationNotProvidedException——keystone/exception.py:741—
UnsupportedTokenVersionExceptionUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:752—
SAMLSigningErrorUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:756keystone/federation/idp.py:467, keystone/federation/idp.py:552
OAuthHeadersMissingErrorUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:765keystone/oauth1/core.py:77
TokenlessAuthConfigErrorValidationError400Could not determine Identity Provider ID. The configuration option %(issuer_attribute)s was not found in the request environment.keystone/exception.py:774keystone/common/tokenless_auth.py:202
CredentialEncryptionErrorException—An unexpected error prevented the server from accessing encrypted credentials.keystone/exception.py:782keystone/credential/providers/fernet/core.py:91, keystone/credential/providers/fernet/core.py:120
LDAPServerConnectionErrorUnexpectedError500An unexpected error prevented the server from fulfilling your request.keystone/exception.py:789keystone/identity/backends/ldap/common.py:1593
LDAPInvalidCredentialsErrorUnexpectedError500Unable to authenticate against Identity backend - Invalid username or passwordkeystone/exception.py:795keystone/identity/backends/ldap/common.py:1591
LDAPSizeLimitExceededUnexpectedError500Number of User/Group entities returned by LDAP exceeded size limit. Contact your LDAP administrator.keystone/exception.py:802keystone/identity/backends/ldap/common.py:1174
CacheDeserializationErrorException——keystone/exception.py:810keystone/models/receipt_model.py:145, keystone/models/token_model.py:622
ResourceUpdateForbiddenForbiddenNotSecurity403Unable to update immutable %(type)s resource: %(resource_id)s. Set resource option "immutable" to false first. |keystone/exception.py:818|keystone/common/resource_options/options/immutable.py:76,keystone/resource/core.py:1048,keystone/resource/core.py:1098` (+1)
ResourceDeleteForbiddenForbiddenNotSecurity403Unable to delete immutable %(type)s resource: %(resource_id)s. Set resource option "immutable" to false first. |keystone/exception.py:826|keystone/common/resource_options/options/immutable.py:90`
OAuth2ErrorError——keystone/exception.py:834—
OAuth2InvalidClientOAuth2Error——keystone/exception.py:842—
OAuth2InvalidRequestOAuth2Error——keystone/exception.py:848—
OAuth2UnsupportedGrantTypeOAuth2Error——keystone/exception.py:854—
OAuth2OtherErrorOAuth2Error——keystone/exception.py:860—
RedirectRequiredException302—keystone/exception.py:866—

Source: reverse-spec-keystone/02-errors_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.