Skip to content

feat(oauth2): Add DPoP replay cache and nonces - #1565

Merged
gtema merged 1 commit into
mainfrom
dpop
Oct 20, 2026
Merged

gtema merged 1 commit into
mainfrom
dpop

Conversation

@gtema

@gtema gtema commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator

Add the bounded (jkt, jti) replay cache that sheds load instead of
evicting live entries, and stateless HMAC time-slot nonces derived from
the cluster salt, as specified in ADR 0043 section 2.

The proof verifier now takes the set of accepted nonces so the current
and previous slot are both honoured.

Assisted-by: Claude noreply@anthropic.com
Signed-off-by: Artem Goncharov artem.goncharov@gmail.com

Add the bounded (jkt, jti) replay cache that sheds load instead of
evicting live entries, and stateless HMAC time-slot nonces derived from
the cluster salt, as specified in ADR 0043 section 2.

The proof verifier now takes the set of accepted nonces so the current
and previous slot are both honoured.

Assisted-by: Claude <noreply@anthropic.com>
Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
Comment thread crates/core/src/oauth2_client/dpop_nonce.rs Dismissed
Comment thread crates/core/src/oauth2_client/dpop_nonce.rs Dismissed
Comment thread crates/core/src/oauth2_client/dpop_nonce.rs Dismissed
Comment thread crates/core/src/oauth2_client/dpop_nonce.rs Dismissed
Comment thread crates/core/src/oauth2_client/dpop_nonce.rs Dismissed
Comment thread crates/core/src/oauth2_client/dpop_nonce.rs Dismissed
Comment thread crates/core/src/oauth2_client/dpop_nonce.rs Dismissed
Comment thread crates/core/src/oauth2_client/dpop_nonce.rs Dismissed
Comment thread crates/core/src/oauth2_client/dpop_nonce.rs Dismissed
Comment thread crates/core/src/oauth2_client/dpop_nonce.rs Dismissed
@github-actions

Copy link
Copy Markdown

🐰 Bencher Report

Projectkeystone
Branchdpop
Testbedubuntu-latest
Click to view all benchmark results
BenchmarkLatencyBenchmark Result
nanoseconds (ns)
(Result Δ%)
Upper Boundary
nanoseconds (ns)
(Limit %)
Command_Serde/apply/remove📈 view plot
🚷 view threshold
106,900.00 ns
(-21.10%)Baseline: 135,488.64 ns
261,840.69 ns
(40.83%)
Command_Serde/apply/set📈 view plot
🚷 view threshold
126,020.00 ns
(-10.98%)Baseline: 141,557.97 ns
247,499.90 ns
(50.92%)
Command_Serde/pack/delete📈 view plot
🚷 view threshold
134.56 ns
(+15.03%)Baseline: 116.97 ns
165.60 ns
(81.26%)
Command_Serde/pack/delete_index📈 view plot
🚷 view threshold
119.06 ns
(+13.22%)Baseline: 105.16 ns
145.61 ns
(81.77%)
Command_Serde/pack/set📈 view plot
🚷 view threshold
215.12 ns
(+13.49%)Baseline: 189.54 ns
273.99 ns
(78.51%)
Command_Serde/pack/set_index📈 view plot
🚷 view threshold
119.63 ns
(+13.33%)Baseline: 105.56 ns
147.77 ns
(80.96%)
Command_Serde/unpack/delete📈 view plot
🚷 view threshold
169.16 ns
(+15.81%)Baseline: 146.07 ns
214.82 ns
(78.75%)
Command_Serde/unpack/delete_index📈 view plot
🚷 view threshold
143.40 ns
(+15.82%)Baseline: 123.81 ns
181.55 ns
(78.98%)
Command_Serde/unpack/set📈 view plot
🚷 view threshold
268.56 ns
(+18.19%)Baseline: 227.23 ns
344.75 ns
(77.90%)
Command_Serde/unpack/set_index📈 view plot
🚷 view threshold
139.08 ns
(+13.08%)Baseline: 123.00 ns
179.46 ns
(77.50%)
Payload_encryption/pack/remove_cmd📈 view plot
🚷 view threshold
126.97 ns
(+16.35%)Baseline: 109.12 ns
162.04 ns
(78.36%)
Payload_encryption/pack/set_cmd📈 view plot
🚷 view threshold
207.33 ns
(+3.90%)Baseline: 199.55 ns
305.84 ns
(67.79%)
Payload_encryption/unpack/remove_cmd📈 view plot
🚷 view threshold
162.26 ns
(+9.68%)Baseline: 147.94 ns
215.36 ns
(75.34%)
Payload_encryption/unpack/set_cmd📈 view plot
🚷 view threshold
272.95 ns
(+17.93%)Baseline: 231.46 ns
349.97 ns
(77.99%)
Raft_1Node_Latency/prefix/1node📈 view plot
🚷 view threshold
3,683,800.00 ns
(-0.19%)Baseline: 3,690,882.97 ns
8,871,435.10 ns
(41.52%)
Raft_1Node_Latency/read/1node📈 view plot
🚷 view threshold
33,540.00 ns
(-3.64%)Baseline: 34,807.95 ns
52,374.09 ns
(64.04%)
Raft_1Node_Latency/remove/1node📈 view plot
🚷 view threshold
346,870.00 ns
(-1.97%)Baseline: 353,830.78 ns
598,593.12 ns
(57.95%)
Raft_1Node_Latency/write/1node📈 view plot
🚷 view threshold
337,400.00 ns
(-12.20%)Baseline: 384,292.81 ns
754,039.31 ns
(44.75%)
build_snapshot/default📈 view plot
🚷 view threshold
2,112.50 ns
(+0.64%)Baseline: 2,099.10 ns
2,836.00 ns
(74.49%)
fernet token/project📈 view plot
🚷 view threshold
1,418.00 ns
(+9.91%)Baseline: 1,290.19 ns
1,767.71 ns
(80.22%)
get_data_keyspace📈 view plot
🚷 view threshold
0.31 ns
(+5.42%)Baseline: 0.30 ns
0.38 ns
(82.12%)
get_db📈 view plot
🚷 view threshold
0.31 ns
(+5.57%)Baseline: 0.30 ns
0.38 ns
(82.30%)
get_fernet_token_timestamp/project📈 view plot
🚷 view threshold
148.33 ns
(+11.47%)Baseline: 133.07 ns
183.81 ns
(80.70%)
get_keyspace📈 view plot
🚷 view threshold
4.14 ns
(-38.21%)Baseline: 6.70 ns
15.77 ns
(26.25%)
🐰 View full continuous benchmarking report in Bencher

@github-actions

Copy link
Copy Markdown

🦢 Load Test Results

Goose Attack Report

Plan Overview

Action Started Stopped Elapsed Users
Increasing 26-10-20 10:17:56 26-10-20 10:18:18 00:00:22 0 → 45
Maintaining 26-10-20 10:18:18 26-10-20 10:18:48 00:00:30 45
Decreasing 26-10-20 10:18:48 26-10-20 10:18:49 00:00:01 0 ← 45

Request Metrics

Method Name # Requests # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
DELETE DELETE /v3/auth/tokens 30 0 836.13 592 1628 1.00 0.00
DELETE DELETE /v3/projects/:id (teardown) 1 0 605.00 605 605 0.03 0.00
DELETE DELETE /v3/roles/:id (teardown) 1 0 519.00 519 519 0.03 0.00
DELETE DELETE /v3/users/:id (teardown) 2 0 759.50 758 761 0.07 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (cc teardown) 1 0 564.00 564 564 0.03 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 0 665.00 665 665 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (cc teardown) 1 0 412.00 412 412 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 0 597.00 597 597 0.03 0.00
GET 335 0 884.13 474 1670 11.17 0.00
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 49 31 246.94 5 761 1.63 1.03
GET GET /v3/auth/tokens (validate new) 30 0 781.73 464 1255 1.00 0.00
GET GET /v3/auth/tokens (validate revoked) 31 0 752.32 334 1541 1.03 0.00
GET GET /v3/projects/:id 38 0 803.03 471 1395 1.27 0.00
GET GET /v3/projects/:id (catalog) 56 0 808.52 437 1205 1.87 0.00
GET GET /v3/role_assignments 29 0 836.00 520 1339 0.97 0.00
GET GET /v3/role_assignments?role.id 29 0 770.72 469 1517 0.97 0.00
GET GET /v3/role_assignments?scope.domain.id 29 0 756.52 459 1110 0.97 0.00
GET GET /v3/role_assignments?user.id 28 0 830.29 576 1506 0.93 0.00
GET GET /v3/roles 77 0 806.38 415 1491 2.57 0.00
GET GET /v3/roles/:id 38 0 803.45 554 1449 1.27 0.00
GET GET /v3/users/:id 71 0 857.48 447 1587 2.37 0.00
GET GET /v3/users/:id (catalog) 69 0 850.86 571 1634 2.30 0.00
GET GET /v4/api-keys 20 0 799.30 498 1518 0.67 0.00
GET GET /v4/api-keys/:client_id 20 0 744.35 515 1145 0.67 0.00
GET GET /v4/mappings/rulesets 20 0 801.75 449 1544 0.67 0.00
GET GET /v4/mappings/rulesets/:mapping_id 20 0 739.15 519 1064 0.67 0.00
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 1385 0 32.21 4 214 46.17 0.00
GET GET /v4/oauth2/:domain_id/clients 21 0 800.67 522 1112 0.70 0.00
GET GET /v4/oauth2/:domain_id/clients/:provider_id 20 0 680.35 431 1520 0.67 0.00
GET GET /v4/oauth2/:domain_id/jwks 1387 0 31.90 4 218 46.23 0.00
GET GET /v4/scim_realms 13 0 715.46 448 941 0.43 0.00
GET GET /v4/scim_realms/:domain_id/:provider_id 14 0 754.57 440 1026 0.47 0.00
POST POST /v3/auth/tokens 29 0 739.28 470 1066 0.97 0.00
POST POST /v3/auth/tokens (password, invalid) 42 0 732.60 438 1258 1.40 0.00
POST POST /v3/auth/tokens (password, project-scoped) 61 0 1199.11 761 1956 2.03 0.00
POST POST /v3/auth/tokens (password, unscoped) 60 0 848.80 511 1598 2.00 0.00
POST POST /v3/auth/tokens (rescope to system) 67 0 914.58 527 1595 2.23 0.00
POST POST /v3/auth/tokens (rescope, invalid project) 41 0 744.98 467 1401 1.37 0.00
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 55 0 1137.04 628 1727 1.83 0.00
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 0 493.00 493 493 0.03 0.00
POST POST /v4/oauth2/:domain_id/device_authorization 412 0 72.80 15 299 13.73 0.00
POST POST /v4/oauth2/:domain_id/token (client_credentials) 14 0 698.50 477 1149 0.47 0.00
PUT PUT /v4/scim_realms/:domain_id/:provider_id 13 0 855.54 644 1551 0.43 0.00
Aggregated 4662 31 289.08 4 1956 155.40 1.03

Response Time Metrics

Method Name 50%ile (ms) 60%ile (ms) 70%ile (ms) 80%ile (ms) 90%ile (ms) 95%ile (ms) 99%ile (ms) 100%ile (ms)
DELETE DELETE /v3/auth/tokens 800 800 900 1,000 1,000 1,000 1,628 1,628
DELETE DELETE /v3/projects/:id (teardown) 605 605 605 605 605 605 605 605
DELETE DELETE /v3/roles/:id (teardown) 519 519 519 519 519 519 519 519
DELETE DELETE /v3/users/:id (teardown) 761 761 761 761 761 761 761 761
DELETE DELETE /v4/mappings/rulesets/:mapping_id (cc teardown) 564 564 564 564 564 564 564 564
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 665 665 665 665 665 665 665 665
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (cc teardown) 412 412 412 412 412 412 412 412
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 597 597 597 597 597 597 597 597
GET 800 900 1,000 1,000 1,000 1,000 1,670 1,670
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 270 280 320 420 500 700 761 761
GET GET /v3/auth/tokens (validate new) 700 800 900 1,000 1,000 1,000 1,000 1,000
GET GET /v3/auth/tokens (validate revoked) 700 700 800 900 1,000 1,000 1,541 1,541
GET GET /v3/projects/:id 700 800 900 1,000 1,000 1,000 1,000 1,000
GET GET /v3/projects/:id (catalog) 800 800 900 1,000 1,000 1,000 1,000 1,000
GET GET /v3/role_assignments 800 800 900 1,000 1,000 1,000 1,000 1,000
GET GET /v3/role_assignments?role.id 800 800 800 900 1,000 1,000 1,517 1,517
GET GET /v3/role_assignments?scope.domain.id 700 800 800 900 1,000 1,000 1,000 1,000
GET GET /v3/role_assignments?user.id 800 800 900 1,000 1,000 1,000 1,506 1,506
GET GET /v3/roles 800 800 800 1,000 1,000 1,000 1,000 1,000
GET GET /v3/roles/:id 700 800 800 1,000 1,000 1,000 1,000 1,000
GET GET /v3/users/:id 800 800 900 1,000 1,000 1,000 1,000 1,587
GET GET /v3/users/:id (catalog) 800 800 900 1,000 1,000 1,000 1,000 1,634
GET GET /v4/api-keys 800 800 900 900 1,000 1,000 1,518 1,518
GET GET /v4/api-keys/:client_id 700 700 800 900 1,000 1,000 1,000 1,000
GET GET /v4/mappings/rulesets 800 800 800 900 900 1,000 1,544 1,544
GET GET /v4/mappings/rulesets/:mapping_id 700 700 700 1,000 1,000 1,000 1,000 1,000
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 26 30 36 45 62 78 110 210
GET GET /v4/oauth2/:domain_id/clients 800 800 900 900 1,000 1,000 1,000 1,000
GET GET /v4/oauth2/:domain_id/clients/:provider_id 600 600 700 900 900 900 1,520 1,520
GET GET /v4/oauth2/:domain_id/jwks 26 30 35 44 59 77 130 218
GET GET /v4/scim_realms 700 800 800 900 900 900 900 900
GET GET /v4/scim_realms/:domain_id/:provider_id 700 700 800 1,000 1,000 1,000 1,000 1,000
POST POST /v3/auth/tokens 700 700 800 900 900 1,000 1,000 1,000
POST POST /v3/auth/tokens (password, invalid) 700 700 800 900 1,000 1,000 1,000 1,000
POST POST /v3/auth/tokens (password, project-scoped) 1,000 1,000 1,000 1,000 1,956 1,956 1,956 1,956
POST POST /v3/auth/tokens (password, unscoped) 800 900 900 900 1,000 1,000 1,000 1,598
POST POST /v3/auth/tokens (rescope to system) 900 900 1,000 1,000 1,000 1,000 1,595 1,595
POST POST /v3/auth/tokens (rescope, invalid project) 700 700 800 900 1,000 1,000 1,000 1,000
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 1,000 1,000 1,000 1,000 1,000 1,727 1,727 1,727
POST POST /v4/api-keys/:client_id/revoke (teardown) 493 493 493 493 493 493 493 493
POST POST /v4/oauth2/:domain_id/device_authorization 61 74 83 100 130 150 200 299
POST POST /v4/oauth2/:domain_id/token (client_credentials) 600 600 800 800 900 900 1,000 1,000
PUT PUT /v4/scim_realms/:domain_id/:provider_id 800 800 800 1,000 1,000 1,000 1,551 1,551
Aggregated 44 66 500 700 900 1,000 1,000 1,956

Status Code Metrics

Method Name Status Codes
DELETE DELETE /v3/auth/tokens 30 [204]
DELETE DELETE /v3/projects/:id (teardown) 1 [204]
DELETE DELETE /v3/roles/:id (teardown) 1 [204]
DELETE DELETE /v3/users/:id (teardown) 2 [204]
DELETE DELETE /v4/mappings/rulesets/:mapping_id (cc teardown) 1 [204]
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 [204]
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (cc teardown) 1 [204]
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 [204]
GET 335 [200]
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 31 [401], 18 [429]
GET GET /v3/auth/tokens (validate new) 30 [200]
GET GET /v3/auth/tokens (validate revoked) 31 [404]
GET GET /v3/projects/:id 38 [200]
GET GET /v3/projects/:id (catalog) 56 [200]
GET GET /v3/role_assignments 29 [200]
GET GET /v3/role_assignments?role.id 29 [200]
GET GET /v3/role_assignments?scope.domain.id 29 [200]
GET GET /v3/role_assignments?user.id 28 [200]
GET GET /v3/roles 77 [200]
GET GET /v3/roles/:id 38 [200]
GET GET /v3/users/:id 71 [200]
GET GET /v3/users/:id (catalog) 69 [200]
GET GET /v4/api-keys 20 [200]
GET GET /v4/api-keys/:client_id 20 [200]
GET GET /v4/mappings/rulesets 20 [200]
GET GET /v4/mappings/rulesets/:mapping_id 20 [200]
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 1,385 [200]
GET GET /v4/oauth2/:domain_id/clients 21 [200]
GET GET /v4/oauth2/:domain_id/clients/:provider_id 20 [200]
GET GET /v4/oauth2/:domain_id/jwks 1,387 [200]
GET GET /v4/scim_realms 13 [200]
GET GET /v4/scim_realms/:domain_id/:provider_id 14 [200]
POST POST /v3/auth/tokens 29 [201]
POST POST /v3/auth/tokens (password, invalid) 42 [401]
POST POST /v3/auth/tokens (password, project-scoped) 61 [201]
POST POST /v3/auth/tokens (password, unscoped) 60 [201]
POST POST /v3/auth/tokens (rescope to system) 67 [201]
POST POST /v3/auth/tokens (rescope, invalid project) 41 [401]
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 55 [201]
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 [200]
POST POST /v4/oauth2/:domain_id/device_authorization 412 [200]
POST POST /v4/oauth2/:domain_id/token (client_credentials) 14 [200]
PUT PUT /v4/scim_realms/:domain_id/:provider_id 13 [200]
Aggregated 272 [201], 38 [204], 18 [429], 114 [401], 4,189 [200], 31 [404]

Transaction Metrics

Transaction # Times Run # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
ReadHeavy
0.0 0 0 0.00 0 0 0.00 0.00
0.1 48 0 939.25 649 1582 1.60 0.00
0.2 47 0 812.83 486 1423 1.57 0.00
0.3 49 0 814.37 474 1320 1.63 0.00
TokenLifecycle
1.0 0 0 0.00 0 0 0.00 0.00
1.1 31 0 3111.97 2444 4610 1.03 0.00
ValidateToken
2.0 0 0 0.00 0 0 0.00 0.00
2.1 64 0 971.03 606 1670 2.13 0.00
UserCRUD
3.0 0 0 0.00 0 0 0.00 0.00
3.1 0 0 0.00 0 0 0.00 0.00
3.2 71 0 857.48 447 1587 2.37 0.00
3.3 2 0 759.50 758 761 0.07 0.00
ProjectCRUD
4.0 0 0 0.00 0 0 0.00 0.00
4.1 0 0 0.00 0 0 0.00 0.00
4.2 38 0 803.08 471 1395 1.27 0.00
4.3 1 0 605.00 605 605 0.03 0.00
RoleCRUD
5.0 0 0 0.00 0 0 0.00 0.00
5.1 0 0 0.00 0 0 0.00 0.00
5.2 38 0 803.53 554 1449 1.27 0.00
5.3 1 0 519.00 519 519 0.03 0.00
RoleList
6.0 0 0 0.00 0 0 0.00 0.00
6.1 77 0 806.40 415 1491 2.57 0.00
RoleAssignmentList
7.0 0 0 0.00 0 0 0.00 0.00
7.1 29 0 836.10 520 1339 0.97 0.00
7.2 28 0 830.32 576 1506 0.93 0.00
7.3 29 0 756.62 459 1111 0.97 0.00
7.4 29 0 770.72 469 1517 0.97 0.00
UserRead
8.0 0 0 0.00 0 0 0.00 0.00
8.1 70 0 919.16 622 1628 2.33 0.00
8.2 69 0 850.88 571 1634 2.30 0.00
ProjectRead
9.0 0 0 0.00 0 0 0.00 0.00
9.1 57 0 816.18 505 1450 1.90 0.00
9.2 56 0 808.55 437 1205 1.87 0.00
PasswordAuth
10.0 60 0 848.85 512 1598 2.00 0.00
10.1 61 0 1199.13 761 1956 2.03 0.00
PasswordAuthNegative
11.0 42 0 732.67 438 1258 1.40 0.00
Rescope
12.0 0 0 0.00 0 0 0.00 0.00
12.1 67 0 914.58 527 1595 2.23 0.00
RescopeNegative
13.0 0 0 0.00 0 0 0.00 0.00
13.1 41 0 745.02 467 1401 1.37 0.00
SystemScopeAuth
14.0 55 0 1137.11 628 1727 1.83 0.00
ApiKeyCRUD
15.0 0 0 0.00 0 0 0.00 0.00
15.1 0 0 0.00 0 0 0.00 0.00
15.2 20 0 744.45 516 1145 0.67 0.00
15.3 20 0 799.45 499 1518 0.67 0.00
15.4 1 0 493.00 493 493 0.03 0.00
MappingCRUD
16.0 0 0 0.00 0 0 0.00 0.00
16.1 0 0 0.00 0 0 0.00 0.00
16.2 20 0 739.20 519 1064 0.67 0.00
16.3 20 0 801.75 449 1544 0.67 0.00
16.4 1 0 665.00 665 665 0.03 0.00
OAuth2ClientCRUD
17.0 0 0 0.00 0 0 0.00 0.00
17.1 0 0 0.00 0 0 0.00 0.00
17.2 20 0 680.35 431 1520 0.67 0.00
17.3 21 0 800.71 522 1112 0.70 0.00
17.4 1 0 597.00 597 597 0.03 0.00
OAuth2ClientCredentials
18.0 0 0 0.00 0 0 0.00 0.00
18.1 0 0 0.00 0 0 0.00 0.00
18.2 14 0 698.50 477 1149 0.47 0.00
18.3 1 0 976.00 976 976 0.03 0.00
OAuth2DeviceAuthorization
19.0 412 0 72.83 15 299 13.73 0.00
OAuth2Discovery
20.0 1387 0 31.93 4 218 46.23 0.00
20.1 1385 0 32.25 4 214 46.17 0.00
ScimRealmRead
21.0 0 0 0.00 0 0 0.00 0.00
21.1 14 0 754.64 440 1026 0.47 0.00
21.2 13 0 715.46 448 941 0.43 0.00
21.3 13 0 855.54 644 1551 0.43 0.00
ScimSync
22.0 0 0 0.00 0 0 0.00 0.00
22.1 0 0 0.00 0 0 0.00 0.00
22.2 0 0 0.00 0 0 0.00 0.00
22.3 50 0 622.80 154 1052 1.67 0.00
22.4 49 0 0.00 0 0 1.63 0.00
22.5 49 0 0.00 0 0 1.63 0.00
22.6 1 0 0.00 0 0 0.03 0.00
Aggregated 4672 0 288.46 4 4610 155.73 0.00

Scenario Metrics

Transaction # Users # Times Run Average (ms) Min (ms) Max (ms) Scenarios/s Iterations
ReadHeavy 4 47 2548.74 2033 3788 1.57 11.75
TokenLifecycle 3 28 3089.96 2444 4611 0.93 9.33
ValidateToken 2 62 970.98 606 1670 2.07 31.00
UserCRUD 2 69 852.30 447 1587 2.30 34.50
ProjectCRUD 1 37 799.68 471 1395 1.23 37.00
RoleCRUD 1 37 799.51 554 1449 1.23 37.00
RoleList 2 75 807.17 415 1491 2.50 37.50
RoleAssignmentList 3 29 3156.34 2470 4475 0.97 9.67
UserRead 4 68 1770.21 1298 2788 2.27 17.00
ProjectRead 3 56 1626.39 1108 2649 1.87 18.67
PasswordAuth 4 57 2045.95 1505 2889 1.90 14.25
PasswordAuthNegative 1 41 728.68 438 1258 1.37 41.00
Rescope 2 65 910.11 527 1595 2.17 32.50
RescopeNegative 1 40 745.40 467 1401 1.33 40.00
SystemScopeAuth 2 53 1129.15 628 1727 1.77 26.50
ApiKeyCRUD 1 19 1542.63 1156 2437 0.63 19.00
MappingCRUD 1 20 1534.30 1051 2517 0.67 20.00
OAuth2ClientCRUD 1 20 1482.05 1054 2529 0.67 20.00
OAuth2ClientCredentials 1 13 2185.46 1683 2599 0.43 13.00
OAuth2DeviceAuthorization 1 411 72.71 15 299 13.70 411.00
OAuth2Discovery 3 1384 64.54 12 310 46.13 461.33
ScimRealmRead 1 13 2332.15 1767 3475 0.43 13.00
ScimSync 1 49 629.78 154 1052 1.63 49.00
Aggregated 45 2693 498.24 12 4611 89.77 1404.00

Error Metrics

Method Name # Error
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 50 401 Unauthorized: GET /SCIM/v2/:domain_id/Users (sync reconcile list)
POST POST /SCIM/v2/:domain_id/Users (sync provision) 1 401 Unauthorized: POST /SCIM/v2/:domain_id/Users (sync provision)
POST POST /v3/auth/tokens (password, invalid) 102 401 Unauthorized: POST /v3/auth/tokens (password, invalid)
POST POST /v3/auth/tokens (rescope, invalid project) 106 401 Unauthorized: POST /v3/auth/tokens (rescope, invalid project)
GET GET /v3/auth/tokens (validate revoked) 112 404 Not Found: GET /v3/auth/tokens (validate revoked)
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 44 429 Too Many Requests: GET /SCIM/v2/:domain_id/Users (sync reconcile list)

View full report

@github-actions

Copy link
Copy Markdown

🧪 Tempest Identity Compatibility Results (advisory, non-blocking)

rust

Totals
======
Ran: 40 tests in 21.0151 sec.
 - Passed: 3
 - Skipped: 2
 - Expected Fail: 0
 - Unexpected Success: 0
 - Failed: 35
Sum of execute time for each test: 7.9876 sec.
Failed test IDs
===== FAILED TESTS (target=rust) =====
tempest.api.identity.admin.v3.test_credentials.CredentialsTestJSON.test_credentials_create_get_update_delete[id-7cd59bf9-bda4-4c72-9467-d21cab278355,smoke]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_create_domain_config_and_show_config_groups_and_options[id-9e3ff13c-f597-4f01-9377-d6c06c2a1477]
setUpClass (tempest.api.identity.admin.v3.test_endpoint_groups.EndPointGroupsTest)
setUpClass (tempest.api.identity.admin.v3.test_endpoints.EndPointsTestJSON)
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_create_update_and_delete_domain_config_groups_and_opts[id-c7510fa2-6661-4170-9c6b-4783a80651e9]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_show_default_group_config_and_options[id-11a02bf0-6f94-4380-b3b0-c8dc18fc0d22]
setUpClass (tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON)
setUpClass (tempest.api.identity.admin.v3.test_default_project_id.TestDefaultProjectId)
setUpClass (tempest.api.identity.admin.v3.test_list_projects.ListProjectsTestJSON)
setUpClass (tempest.api.identity.admin.v3.test_groups.GroupsV3TestJSON)
setUpClass (tempest.api.identity.admin.v3.test_domains.DomainsTestJSON)
setUpClass (tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test)
setUpClass (tempest.api.identity.admin.v3.test_tokens.TokensV3TestJSON)
setUpClass (tempest.api.identity.admin.v3.test_domains_negative.DomainsNegativeTestJSON)
setUpClass (tempest.api.identity.admin.v3.test_list_projects.ListProjectsStaticTestJSON)
setUpClass (tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON)
setUpClass (tempest.api.identity.admin.v3.test_endpoints_negative.EndpointsNegativeTestJSON)
setUpClass (tempest.api.identity.admin.v3.test_project_tags.IdentityV3ProjectTagsTest)
setUpClass (tempest.api.identity.v3.test_api_discovery.TestApiDiscovery)
setUpClass (tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON)
setUpClass (tempest.api.identity.admin.v3.test_list_users.UsersV3TestJSON)
setUpClass (tempest.api.identity.admin.v3.test_projects_negative.ProjectsNegativeTestJSON)
setUpClass (tempest.api.identity.admin.v3.test_services.ServicesTestJSON)
setUpClass (tempest.api.identity.v3.test_domains.DefaultDomainTestJSON)
setUpClass (tempest.api.identity.admin.v3.test_policies.PoliciesTestJSON)
setUpClass (tempest.api.identity.admin.v3.test_users_negative.UsersNegativeTest)
setUpClass (tempest.api.identity.admin.v3.test_users.UsersV3TestJSON)
setUpClass (tempest.api.identity.admin.v3.test_projects.ProjectsTestJSON)
setUpClass (tempest.api.identity.v3.test_ec2_credentials.EC2CredentialsTest)
setUpClass (tempest.api.identity.admin.v3.test_projects_negative.ProjectsNegativeStaticTestJSON)
setUpClass (tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test)
setUpClass (tempest.api.identity.v3.test_tokens.TokensV3Test)
setUpClass (tempest.api.identity.admin.v3.test_regions.RegionsTestJSON)
setUpClass (tempest.api.identity.v3.test_catalog.IdentityCatalogTest)
setUpClass (tempest.api.identity.v3.test_projects.IdentityV3ProjectsTest)
===== END FAILED TESTS (target=rust) =====

View full run

@gtema
gtema added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit e0e7190 Oct 20, 2026
42 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants