Skip to content

Commit 5b12813

Browse files
committed
docs(notary): document registrar client trust
Signed-off-by: Jeremi Joslin <jeremi@joslin.fr>
1 parent 93aed4d commit 5b12813

1 file changed

Lines changed: 29 additions & 8 deletions

File tree

‎products/notary/docs/oid4vci-wallet-interop.md‎

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,32 @@ An authorized registry client can create an offer after it evaluates the
5454
authoritative record through `POST /v1/evaluations`. This path does not use the
5555
citizen browser or identity-provider callback.
5656

57-
The machine credential must be an external configured API key or OpenID
58-
Connect (OIDC) token. A Notary-issued wallet access token is not accepted. The
59-
credential needs `registry_notary:credential_offer_create`, the selected
60-
credential configuration's scope, and access to the evaluation's exact
61-
service, purpose, claims, and target. It must carry Registry Notary
62-
`authorization_details` that permit `create_credential_offer` for the exact
63-
target, complete claim set, value disclosure, claim-result format, purpose,
64-
service, and machine access mode.
57+
Generated projects admit registrar OIDC clients explicitly:
58+
59+
```yaml
60+
oid4vci:
61+
public_base_url: https://notary.example.gov
62+
registrar_clients: [opencrvs-registrar]
63+
```
64+
65+
Registryctl keeps these clients on the same pinned authorization server and
66+
JWKS as the citizen client, but requires the Notary `public_base_url` as the
67+
machine resource audience. The signed `JWT` access token needs a stable `sub`
68+
that matches the evaluation owner, an admitted `azp` or `client_id`,
69+
`registry_notary:credential_offer_create`, the selected credential
70+
configuration's scope, and exact Registry Notary `authorization_details`.
71+
Those details must permit `create_credential_offer` for the target, complete
72+
claim set, value disclosure, claim-result format, purpose, service, and
73+
machine access mode. Identify the target with the evaluated primary
74+
identifier's scheme and value. When an entity has only a top-level
75+
`target.id`, use the reserved authorization `id_type` value `id`; this keeps
76+
typed identifiers distinct from the untyped top-level ID.
77+
78+
An admitted registrar client with the machine resource audience needs only
79+
the access token; citizen userinfo and ID-token assurance are not required.
80+
Any citizen client or citizen audience signal still selects the citizen path,
81+
so mixed client/audience tokens cannot retain machine authority. A
82+
Notary-issued wallet access token is not accepted.
6583

6684
Send only the stored evaluation identifier and configured credential type:
6785

@@ -112,6 +130,9 @@ transaction. Reusing the key for another request, using another key for an
112130
evaluation already reserved for issuance, or racing two requests returns
113131
`409`. A client-scoped quota can return `429`. Retry a lost response with the
114132
original key; do not start another evaluation or invent a second key.
133+
Exact replays, known idempotency conflicts, and consumed-evaluation preflights
134+
do not call the signer. A genuinely new attempt consumes client quota before
135+
signer work, so signer failures still count toward abuse protection.
115136

116137
The wallet then redeems the offer through `/oid4vci/token` and
117138
`/oid4vci/credential`. The pre-authorized code, access token, proof nonce,

0 commit comments

Comments
 (0)