QA-02: echter End-to-End-Testlauf ueber TEN-01..07/IAM-01..14

Volle Merge-Verifikation aller 21 Vorbedingungs-Tickets: neue
internal/e2e-Tests (Tenant-Onboarding-Login-Flow, Cross-Tenant-Isolation)
gegen echte Postgres-Instanz, docs/QA-02-PRUEFPROTOKOLL.md mit
Ticket-zu-Test-Zuordnung. Dabei echten Merge-Konflikt zwischen IAM-12 und
IAM-13 gefunden und behoben (jwk/jwkSet-Typkollision in internal/oidc).
124/124 Tests gruen auf 131.
This commit is contained in:
sysops
2026-08-29 09:35:31 +02:00
parent 4f84ee23dc
commit 314b821929
6 changed files with 440 additions and 7 deletions
+11 -6
View File
@@ -206,14 +206,19 @@ func (h *Handler) issueIDToken(data AuthCodeData) (string, error) {
return token.SignedString(key.Private)
}
// jwk / jwkSet folgen RFC 8037 (Ed25519 als OKP-Schluesseltyp) — im
// idpJWK / idpJWKSet folgen RFC 8037 (Ed25519 als OKP-Schluesseltyp) — im
// Unterschied zu moduletrust.ServeJWKS (internes, vereinfachtes Format fuer
// Modul-zu-Modul-Kommunikation) muss dieser Endpunkt von generischen,
// standardkonformen OIDC-Client-Bibliotheken Dritter lesbar sein
// (Akzeptanzkriterium 3). Beide Endpunkte liefern dieselben Schluessel aus
// demselben KeyManager — kein zweites Schluesselsystem, nur ein zweites,
// spezifikationskonformes Format desselben Materials.
type jwk struct {
//
// Eigener Typname (statt jwk/jwkSet wie in jwks.go), da jwks.go das RSA-
// basierte JWKS-Format fuer die Verifikation EXTERNER OIDC-Provider
// implementiert (IAM-12) — dieser Typ hier ist Core als eigener IdP
// (IAM-13, Ed25519/OKP) und darf nicht verwechselt werden.
type idpJWK struct {
Kty string `json:"kty"`
Crv string `json:"crv"`
Kid string `json:"kid"`
@@ -222,15 +227,15 @@ type jwk struct {
Alg string `json:"alg"`
}
type jwkSet struct {
Keys []jwk `json:"keys"`
type idpJWKSet struct {
Keys []idpJWK `json:"keys"`
}
func (h *Handler) JWKS(w http.ResponseWriter, r *http.Request) {
set := h.keys.PublicKeySet()
resp := jwkSet{Keys: make([]jwk, 0, len(set))}
resp := idpJWKSet{Keys: make([]idpJWK, 0, len(set))}
for kid, pub := range set {
resp.Keys = append(resp.Keys, jwk{
resp.Keys = append(resp.Keys, idpJWK{
Kty: "OKP",
Crv: "Ed25519",
Kid: kid,