Zum Hauptinhalt springen

2. HTTP Message Components (HTTP-Nachrichtenkomponenten)

2. HTTP Message Components (HTTP-Nachrichtenkomponenten)

Damit Signierende und Verifizierende feststellen können, welche Komponenten von einer Signatur abgedeckt sind, definiert dieses Dokument Komponenten-Identifikatoren (component identifiers) für von einer HTTP-Nachrichtensignatur abgedeckte Komponenten, Regeln zur Ableitung und Kanonisierung der mit diesen Identifikatoren verbundenen Werte aus der HTTP-Nachricht sowie die Zusammenführung dieser kanonisierten Werte zu einer Signaturbasis (signature base).

Der Signaturkontext (signature context) zur Ableitung dieser Werte MUSS Signierendem und Verifizierendem der Nachricht zugänglich sein. Der Kontext MUSS für alle Komponenten einer gegebenen Signatur derselbe sein. Beispielsweise wäre es ein Fehler, die Roh-Queryzeichenkette für die abgeleitete Komponente @query zu verwenden, aber kombinierte Query- und Formularparameter für @query-param. Weitere Überlegungen zum Nachrichtenkomponentenkontext siehe Abschnitt 7.4.3.

Ein Komponenten-Identifikator besteht aus einem Komponentennamen (component name) und allen mit diesem Namen verbundenen Parametern. Jeder Komponentenname ist entweder ein HTTP-Feldname (Abschnitt 2.1) oder ein registrierter Name einer abgeleiteten Komponente (Abschnitt 2.2). Mögliche Parameter eines Identifikators hängen vom Identifikator ab. Das Register „HTTP Signature Component Parameters“, das alle möglichen Parameter katalogisiert, ist in Abschnitt 6.5 definiert.

Innerhalb einer einzelnen Liste abgedeckter Komponenten MUSS jeder Komponenten-Identifikator nur einmal vorkommen. Zwei Identifikatoren sind unterschiedlich, wenn sich der Komponentenname unterscheidet oder sich bei gleichem Namen ein Parameter unterscheidet. Mehrere Identifikatoren mit gleichem Komponentennamen KÖNNEN enthalten sein, wenn Parameter sie unterscheiden, z. B. foo;bar und foo;baz. Die Reihenfolge der Parameter MUSS bei der Verarbeitung eines Identifikators (z. B. beim Parsen bei der Verifikation) erhalten bleiben; die Reihenfolge ist jedoch bei Gleichheitsvergleichen zweier Identifikatoren nicht signifikant. Das heißt, foo;bar;baz darf nicht in derselben Nachricht wie foo;baz;bar vorkommen, da diese äquivalent sind; ein System darf eine Form nicht in die andere transformieren.

Der mit einem Komponenten-Identifikator verbundene Komponentenwert (component value) wird durch den Identifikator selbst definiert. Komponentenwerte DÜRFEN KEINE Zeilenumbruchszeichen (\n) enthalten. Einige HTTP-Nachrichtenkomponenten können Transformationen erfahren, die die Bitfolge ändern, ohne die Bedeutung zu ändern (z. B. Zusammenführung von Feldwerten). Komponentenwerte müssen daher vor dem Signieren kanonisiert werden, damit eine Signatur trotz solcher Vermittler-Transformationen verifizierbar ist. Dieses Dokument definiert für jeden Komponenten-Identifikator Regeln, die den zugehörigen Wert in eine solche kanonische Form bringen.

Die folgenden Abschnitte definieren Namen von Komponenten-Identifikatoren, ihre Parameter, zugehörige Werte und Kanonisierungsregeln. Die Methode zur Kombination zu einer Signaturbasis steht in Abschnitt 2.5.