Motivation
jgit-proxy currently has no concept of authenticated users:
- REST API is fully open
reviewerUsername in Attestation is an unverified string
DummyUserAuthorizationService always returns true
- HTTP Basic challenge to git clients is never validated
This tracked the full AuthN/AuthZ/identity work. All phases are now either complete or have been broken out into standalone issues.
Data Model ✅
Three tables underpin the whole identity system — all implemented.
Phase 0 — Spring Security foundation ✅
Phase 1 — Pluggable identity providers ✅
Phase 2 — Identity linking ✅
Phase 3 — Upstream SCM OAuth
Tracked in #40.
Phase 4 — Push attribution enforcement ✅
Remaining work (tracked in separate issues)
Motivation
jgit-proxy currently has no concept of authenticated users:
reviewerUsernameinAttestationis an unverified stringDummyUserAuthorizationServicealways returnstrueThis tracked the full AuthN/AuthZ/identity work. All phases are now either complete or have been broken out into standalone issues.
Data Model ✅
Three tables underpin the whole identity system — all implemented.
Phase 0 — Spring Security foundation ✅
SecurityConfigwith form login, CSRF, stateful sessionsreviewerUsernamederived fromSecurityContextprincipalInMemoryUserDetailsManagerPhase 1 — Pluggable identity providers ✅
StaticUserStore(YAML, read-only) andJdbcUserStore/MutableUserStoreCheckUserPushPermissionHook/CheckUserPushPermissionFilter+BasicAuthChallengeFilterStaticUserAuthProviderandJdbcUserAuthProviderLdapAuthenticationProviderwithLdapEmailContextMapper—auth.provider: ldapoauth2Login—auth.provider: oidcPhase 2 — Identity linking ✅
ProfileControllerat/api/me— self-service email and SCM identity managementPhase 3 — Upstream SCM OAuth
Tracked in #40.
Phase 4 — Push attribution enforcement ✅
IdentityVerificationHook(order 160) — configurable viacommit.identity-verification: strict | warn | offPushRecord.userEmailpopulated from authenticated principaluser_scm_identitiesviaTokenPushIdentityResolverRemaining work (tracked in separate issues)