Kapitel 9: Fehlercodes und Konformitätsstufen

Dieses Kapitel definiert die standardisierte Fehlercodetabelle des CAP-Protokolls und die Art und Weise, wie Implementierungen Konformitätsstufen deklarieren.

9.1 Fehlercode-Format

Fehlercodes verwenden das Präfix E_ mit Großbuchstaben-Unterstrich-Benennung. Die Fehlercode-Zeichenfolge selbst ist normativ — Implementierungen dieser Spezifikation MÜSSEN die entsprechende Fehlercode-Zeichenfolge gemäß den Definitionen in diesem Kapitel zurückgeben, um eine konsistente Diagnose zwischen Implementierungen zu ermöglichen.

Fehlerantwort-Nachrichtenstruktur:

ErrorBody {
  required error_code : string
  required message    : string
  optional details    : map<string, string>
  optional retry_after_ms : uint32
}
FeldBeschreibung
error_codeIn diesem Kapitel definierter Standard-Fehlercode
messageMenschenlesbare Fehlerbeschreibung (Sprache nicht festgelegt; Englisch oder Deutsch empfohlen)
detailsZusätzlicher Kontext für den Fehler (z. B. das spezifische verletzte Feld)
retry_after_msEmpfohlene Wartezeit für die Wiederholung des Clients; nur für vorübergehende Fehler sinnvoll

9.2 Anmeldeinformations-bezogene Fehlercodes

Gilt für Validierungsfehlerszenarien für Authorization_Descriptor und Trusted_Ticket.

FehlercodeHTTP-ÄquivalentAuslösebedingungKonformität
E_DESCRIPTOR_NOT_FOUND404Die referenzierte descriptor_id wurde lokal auf dem Endgerät nicht gefundenEndgerät MUSS
E_INVALID_STRUCTURE400Anmeldeinformationsstruktur entspricht nicht §2.3 / §2.4Endgerät/Aussteller MUSS
E_INVALID_SIGNATURE401Signaturvalidierung fehlgeschlagenEndgerät MUSS
E_VERIFICATION_KEY_INVALID401Der Verification_Key, der der Signatur-key_id entspricht, ist nicht registriert oder widerrufenEndgerät MUSS
E_UNKNOWN_ISSUER401Die issuer_id der Anmeldeinformation befindet sich nicht in der Vertrauensliste des EndgerätsEndgerät MUSS
E_DESCRIPTOR_REVOKED403Authorization_Descriptor wurde widerrufenEndgerät MUSS
E_TICKET_REVOKED403Trusted_Ticket wurde widerrufenEndgerät MUSS
E_DESCRIPTOR_EXPIRED403Anmeldeinformation hat not_after überschrittenEndgerät MUSS
E_DESCRIPTOR_NOT_YET_VALID403Aktuelle Zeit früher als not_beforeEndgerät MUSS
E_TICKET_MALFORMED400JWS-Parsing fehlgeschlagen oder typ falschEndgerät MUSS
E_DUPLICATE_DESCRIPTOR_ID409Übermittelte Anmeldeinformation steht im Konflikt mit gespeicherter Anmeldeinformations-ID mit nicht übereinstimmendem InhaltEndgerät MUSS
E_VALIDITY_OUT_OF_RANGE400not_after - not_before der Anmeldeinformation überschreitet das LimitEndgerät/Aussteller MUSS
E_REVOCATION_QUERY_TIMEOUT504Online-Widerrufsabfrage-TimeoutEndgerät SOLLTE

9.3 Autorisierungsbereich-Fehlercodes

Gilt für Szenarien, in denen die Anmeldeinformation legitim ist, der Autorisierungsbereich jedoch nicht übereinstimmt.

FehlercodeHTTP-ÄquivalentAuslösebedingung
E_SUBJECT_MISMATCH403Anmeldeinformations-Subjekt stimmt nicht mit Anforderer-fay_id überein
E_TERMINAL_MISMATCH403Anmeldeinformations-terminal_id stimmt nicht mit aktuellem Endgerät überein
E_AUTHORIZATION_INSUFFICIENT403Kein passender Grant für (resource, mode)
E_RATE_LIMIT_EXCEEDED429Überschreitet das Frequenzlimit in constraints
E_OUT_OF_TIME_WINDOW403Aktuelle Zeit liegt außerhalb des constraints-Zeitfensters
E_OUT_OF_GEO_FENCE403Endgerätestandort liegt außerhalb des constraints-Geofence
E_UNSUPPORTED_CONSTRAINT400Anmeldeinformation enthält nicht erkannten constraint-Schlüssel

9.4 Ressourcen- und Sitzungsfehlercodes

Gilt für Fehler im Zusammenhang mit Ressourcenbelegung und Session-Zustand.

FehlercodeHTTP-ÄquivalentAuslösebedingung
E_RESOURCE_BUSY409Ressource bereits im angeforderten Modus belegt (verletzt Lese-Schreib-Sperrmatrix)
E_RESOURCE_UNAVAILABLE503Ressource derzeit nicht verfügbar (Hardware-Trennung, Software läuft nicht usw.)
E_RESOURCE_NOT_FOUND404resource_id existiert nicht
E_SESSION_NOT_FOUND404session_id existiert nicht
E_SESSION_TERMINATED410Session beendet, kann Operation nicht fortsetzen
E_SESSION_LIMIT_EXCEEDED429Überschreitet das in §5.8 definierte Session-Mengenlimit
E_OS_INTEGRATION_FAILED500OS-Zugriffskontrollbereitstellung fehlgeschlagen

9.5 Übergabe-bezogene Fehlercodes

Gilt für den in Kapitel 6 definierten Übergabeablauf.

FehlercodeHTTP-ÄquivalentAuslösebedingung
E_HANDOVER_INVALID_SOURCE400source_session_id existiert nicht oder Zustand erlaubt keine Übergabe
E_HANDOVER_INVALID_TARGET400target_credential-Validierung fehlgeschlagen
E_HANDOVER_REJECTED_BY_POLICY403Richtlinienbewertung lehnt Übergabe ab
E_HANDOVER_FAILED_AT_RELEASE500Quell-Session-Freigabe während der Übergabe fehlgeschlagen
E_HANDOVER_FAILED_AT_ACQUIRE500Ziel-Session-Erstellung während der Übergabe fehlgeschlagen
E_HANDOVER_TIMEOUT504Übergabe-Timeout
E_HANDOVER_IN_PROGRESS409Ressource hat eine laufende Übergabe; neue Anfrage abgelehnt
E_HANDOVER_RETRY_LIMIT429Wiederholungsanzahl überschreitet Limit

9.6 Protokoll- und Systemfehlercodes

FehlercodeHTTP-ÄquivalentAuslösebedingung
E_PROTOCOL_VERSION_UNSUPPORTED400Nachrichten-version-Feld wird von der Implementierung nicht unterstützt
E_INVALID_MESSAGE400Protokollnachrichtenformat entspricht nicht §2.6
E_INTERNAL_ERROR500Interner Endgerätefehler (legt keine Details offen)
E_NOT_IMPLEMENTED501Implementierung bietet die optionale Fähigkeit nicht
E_STORAGE_FULL507Endgeräte-Anmeldeinformationsspeicher voll

9.7 Fehlercode-Erweiterung

Implementierungen KÖNNEN benutzerdefinierte Fehlercodes definieren, MÜSSEN jedoch:

  1. Das Benennungsformat E_VENDOR_<vendor_name>_<code> verwenden (z. B. E_VENDOR_ACME_QUOTA_EXCEEDED)
  2. Nicht mit in diesem Kapitel definierten Standard-Fehlercodes in Konflikt stehen
  3. Die Semantik in der Implementierungsdokumentation klar angeben

iFay_Runtime SOLLTE nicht erkannte benutzerdefinierte Fehlercodes als E_INTERNAL_ERROR behandeln.

9.8 Konformitätsstufen-Deklaration

Implementierungen MÜSSEN die von ihnen erfüllten Konformitätsstufen über das Folgende deklarieren.

9.8.1 Konformitätsanspruch-Struktur

ConformanceClaim {
  required protocol_version : string                  // Z. B. "1.0.0" oder "draft"
  required levels           : array<ConformanceLevel> (len 1..3)
  optional optional_features : array<string>
  optional vendor_extensions : array<string>
}

ConformanceLevel = enum["terminal", "issuer", "runtime"]
FeldBeschreibung
protocol_versionVon der Implementierung befolgte CAP-Protokollversion
levelsVon der Implementierung erfüllte Konformitätsstufen (siehe §0.5)
optional_featuresVon der Implementierung unterstützte optionale Fähigkeiten (z. B. aggregated_heartbeat, ai_model_handover_policy)
vendor_extensionsVon der Implementierung unterstützte Anbietererweiterungsfähigkeiten

9.8.2 Deklarations-Veröffentlichungskanäle

Implementierungen SOLLTEN ConformanceClaim über die folgenden Kanäle veröffentlichen:

  1. Explizite Deklaration in der Produktdokumentation
  2. Rückgabe über bestimmte Abfrageschnittstellen (definiert durch die Implementierung)
  3. Deklariert in den SDK-Paketmetadaten

9.8.3 Konformitätstests

Die Konformitätstest-Suite (Conformance Test Suite) des CAP-Protokolls wird vom Projekt als unterstützendes Asset gepflegt, liegt jedoch außerhalb des normativen Geltungsbereichs dieser Spezifikation. Jede Implementierung SOLLTE die Testsuite für die entsprechende Konformitätsstufe bestehen, DARF jedoch NICHT auf die Testsuite als alleinige Garantie für Korrektheit angewiesen sein.

9.9 Fehlercode-Verwendungsempfehlungen

Implementierungen SOLLTEN den folgenden Fehlercode-Verwendungsprinzipien folgen:

  1. Bevorzugen Sie den spezifischsten Fehlercode: Beispielsweise wird E_TICKET_REVOKED E_TICKET_MALFORMED vorgezogen (auch wenn beide während der Analyse erscheinen könnten)
  2. Legen Sie keine internen Details über Fehlercodes offen: Vermeiden Sie es, Schlüsselfingerabdrücke, interne IDs und andere sensible Informationen im error message-Feld offenzulegen
  3. Stellen Sie diagnostische Unterstützung über das details-Feld bereit: Beispielsweise zeigt details["field"] = "not_after" an, welches spezifische Feld nicht konform ist
  4. Verwenden Sie retry_after_ms für vorübergehende Fehler: Beispielsweise E_RESOURCE_BUSY, E_HANDOVER_IN_PROGRESS

9.10 Synchronisierung von Fehlercodes mit schema.json

schema/{version}/schema.json MUSS die vollständige Fehlercode-Aufzählungsdefinition enthalten und mit diesem Kapitel konsistent gehalten werden. Wenn die Fehlercodeliste in diesem Kapitel aktualisiert wird, MUSS schema.json synchron aktualisiert werden.