Repository navigation
Backend: outbound service-account tokens and identity-store migration - #6110
shai-almog wants to merge 6 commits into
Conversation
Client credentials (basic, post, private_key_jwt) and RFC 7523 JWT bearer grants, Google service-account JSON, and AccessTokenProvider: expiry-aware cache, one shared refresh, cooldown backoff, sanitized failures. JVM tests and the same checks in the native authcheck. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ModularPbkdf2PasswordEncoder reads Django, passlib and Werkzeug hashes; IdentityMigration imports users, federated links, passkeys and TOTP verbatim and returns a MigrationReport; AuthorizationServerKeys keeps a key's kid (key-ids) and takes verify-only keys (verification-keys). Docs for both RFEs, including what a migration keeps and what it invalidates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Case-only username collisions attach nothing; a hash the id's encoder cannot parse needs a reset; an Error from a grant no longer wedges the provider; jwt_bearer sends scope as a form parameter unless asked (Google asks); no unsanitized cause; skew capped at half a token's life; use=enc keys refused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ntials-migration # Conflicts: # docs/developer-guide/Backend-Security.asciidoc # vm/backend/demo/authcheck/com/demo/AuthCheck.java
|
Developer Guide build artifacts are available for download from this workflow run:
Developer Guide quality checks: |
Cloudflare Preview
|
|
Compared 191 screenshots: 191 matched. Native Android coverage
✅ Native Android screenshot tests passed. Native Android coverage
Benchmark ResultsDetailed Performance Metrics
|
|
Compared 227 screenshots: 227 matched. |
|
Compared 206 screenshots: 206 matched. Benchmark ResultsDetailed Performance Metrics
|
✅ Continuous Quality ReportTest & Coverage
Static Analysis
Generated automatically by the PR CI workflow. |
|
Compared 206 screenshots: 206 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows x64Runner CPU: AMD64 Family 25 Model 1 Stepping 1, AuthenticAMD (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 206 screenshots: 206 matched. ParparVM vs HotSpot (JDK 25): Linux x64Runner CPU: AMD EPYC 9V45 96-Core Processor (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 206 screenshots: 206 matched. ParparVM vs HotSpot (JDK 25): Linux arm64Runner CPU: Neoverse-N2 (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
✅ ByteCodeTranslator Quality ReportTest & Coverage
Benchmark Results
Static Analysis
Generated automatically by the PR CI workflow. |
|
Compared 206 screenshots: 206 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows arm64Runner CPU: ARMv8 (64-bit) Family 8 Model D49 Revision 0, MICROSOFT CORPORATION (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 192 screenshots: 192 matched. Benchmark Results
Detailed Performance Metrics
ParparVM vs HotSpot (JDK 25): macOS arm64Runner CPU: Apple M1 (Virtual) (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
Resolves #5997 and #6000.
#5997 Outbound service-account tokens
New package
security.oauth2.client.credentials:ClientCredentialsGrant: client_secret_basic, client_secret_post, private_key_jwt.JwtBearerGrant(RFC 7523), signed RS256/ES256/ES384 with the key'skid; scope goes in the form unless asked into the assertion.GoogleServiceAccountCredentials: reads the service-account JSON (Google's scope-in-assertion convention).AccessTokenProvider:napUntil;AccessTokenProviders.fromConfig: builds a provider fromcn1.security.oauth2.client.credentials.<name>.*.#6000 Identity-store migration
ModularPbkdf2PasswordEncoderreads Django, passlib and Werkzeug PBKDF2 hashes, with a bounded round count.DelegatingPasswordEncoder.isSupportedasks the delegate whether it can read the value.IdentityMigration+MigrationReport:AuthorizationServerKeys:jwk.key-idskeeps a key's originalkid, andjwk.verification-keysadds verify-only keys (PEM or JWK Set). Private anduse=enckeys are refused.Testing
hashlib;BackendSecurityTest).backendandbackend-parparvm. Backend javadoc doclint and Vale pass.🤖 Generated with Claude Code