§5.2 ("Binding keys to the directory authority") RECOMMENDS that a directory server include one per-key HTTP Message Signature over @authority;req + content-digest, and says "clients SHOULD ignore keys from a directory response that do not have a corresponding valid signature." PR #98's intent extends this to jwks_uri responses ("we still strongly suggest that jwks_uri response is signed to bind keys to a domain").
This is applied uniformly, but the binding goal is already met by the transport in one common case:
-
Same-origin serving. When the directory / jwks_uri is served from the same origin as the @authority the keys speak for, TLS to that origin already binds the keys to that authority. A verifier that fetched https://signer.example/... over TLS and got these keys has the same authority binding the per-key @authority;req signature would provide. The signature is redundant with TLS here.
-
Delegated / cross-origin serving. When keys are served from a different origin than the authority (delegation, third-party key hosting, a shared key service), TLS to the key host does not bind the keys to the authority. The per-key @authority;req signature is then the essential — and only — binding. This is exactly where §5.2 earns its keep.
Proposal
Scope §5.2's signing recommendation (and the "ignore unsigned keys" guidance) to the delegated / cross-origin case, or at minimum add a note that a directory/jwks_uri served same-origin with the authority over TLS satisfies the authority-binding goal without per-key signatures. Otherwise a conformant verifier following the blanket SHOULD would ignore unsigned keys that are in fact securely bound to the authority by TLS.
Why it matters
Deployments that reuse a same-origin identity document as the JWKS — e.g., an agent/commerce profile served at the operator's own well-known URL, pointed to by Signature-Agent; type=jwks_uri — would otherwise be forced into dynamic per-key response signing: private keys at the serving layer (or a precompute pipeline), caches keyed on @authority, and re-signing on expires. That is real operational burden with no security gain over TLS in the same-origin case. Distinguishing the two cases keeps the simple same-origin path viable while preserving the signature requirement where it is actually load-bearing (delegation/cross-origin).
§5.2 ("Binding keys to the directory authority") RECOMMENDS that a directory server include one per-key HTTP Message Signature over
@authority;req+content-digest, and says "clients SHOULD ignore keys from a directory response that do not have a corresponding valid signature." PR #98's intent extends this tojwks_uriresponses ("we still strongly suggest that jwks_uri response is signed to bind keys to a domain").This is applied uniformly, but the binding goal is already met by the transport in one common case:
Same-origin serving. When the directory /
jwks_uriis served from the same origin as the@authoritythe keys speak for, TLS to that origin already binds the keys to that authority. A verifier that fetchedhttps://signer.example/...over TLS and got these keys has the same authority binding the per-key@authority;reqsignature would provide. The signature is redundant with TLS here.Delegated / cross-origin serving. When keys are served from a different origin than the authority (delegation, third-party key hosting, a shared key service), TLS to the key host does not bind the keys to the authority. The per-key
@authority;reqsignature is then the essential — and only — binding. This is exactly where §5.2 earns its keep.Proposal
Scope §5.2's signing recommendation (and the "ignore unsigned keys" guidance) to the delegated / cross-origin case, or at minimum add a note that a directory/
jwks_uriserved same-origin with the authority over TLS satisfies the authority-binding goal without per-key signatures. Otherwise a conformant verifier following the blanket SHOULD would ignore unsigned keys that are in fact securely bound to the authority by TLS.Why it matters
Deployments that reuse a same-origin identity document as the JWKS — e.g., an agent/commerce profile served at the operator's own well-known URL, pointed to by
Signature-Agent; type=jwks_uri— would otherwise be forced into dynamic per-key response signing: private keys at the serving layer (or a precompute pipeline), caches keyed on@authority, and re-signing onexpires. That is real operational burden with no security gain over TLS in the same-origin case. Distinguishing the two cases keeps the simple same-origin path viable while preserving the signature requirement where it is actually load-bearing (delegation/cross-origin).