Required components covered
Signature-Input must cover @authority, and signature-agent too whenever a Signature-Agent header is sent.
What this check verifies
The parenthesised list at the start of Signature-Input names the covered components: the parts of the request the signature commits to. For the web-bot-auth profile the architecture draft makes exactly one component mandatory, @authority, the request’s host and port. The Cloudflare reference implementation encodes the same rule in its REQUIRED_COMPONENTS lists.
signature-agent is required only when you send a Signature-Agent header. The draft puts it this way: if the header is sent, it MUST be signed as a component. So the rule is conditional. No header, no requirement; header present, the component must be covered.
This check reads the covered set from Signature-Input and confirms @authority is there. If the request also carries a Signature-Agent header, it confirms signature-agent is covered as well. A missing required component fails the check.
Signature-Input: sig1=("@authority" "signature-agent");created=...;keyid="...";tag="web-bot-auth"
Why it matters
A signature only protects what it covers. If @authority is not in the covered set, the signature says nothing about which host the request was aimed at, so a captured signature could be replayed against a different origin and still verify. Covering @authority binds the signature to the intended host.
signature-agent matters for the same reason. The header tells a verifier where to fetch your keys. If you send it but leave it uncovered, an attacker can swap the header to point at a directory they control while the signature still checks out, which defeats the point of naming the directory.
How to fix it
- Always include
@authorityin the covered components. - If you send a
Signature-Agentheader, addsignature-agentto the covered list too. The two go together: send the header and cover it, or send neither.
A correct minimal list with no Signature-Agent header:
Signature-Input: sig1=("@authority");created=...;keyid="...";tag="web-bot-auth"
With a Signature-Agent header:
Signature-Input: sig1=("@authority" "signature-agent");created=...;keyid="...";tag="web-bot-auth"
Whatever you cover here must match what is fed into the signature base when the request is signed; a mismatch shows up as a verification failure rather than a covered-components failure.
References
- RFC 9421 defines covered components, including the
@authorityderived component. - The web-bot-auth architecture draft makes
@authoritymandatory andsignature-agentrequired when the header is sent. - How grading works explains how a missing required component affects the grade.
How the checker scores this
- Tier
- Signature
- Role
- Advisory. Failing this never caps the grade or changes the verdict.
- Point deduction
- A failure deducts 30 points; a warning deducts 8.