-
Notifications
You must be signed in to change notification settings - Fork 16
task1: RP intermediary use case #118
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 1 commit
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
138 changes: 138 additions & 0 deletions
138
task1-use-cases/subtask1-2-trust-registry/relying-party-intermediary-use-case.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,138 @@ | ||
| # Use Case UC-RPI-01: Relying Party Intermediary | ||
|
|
||
| ## Scope | ||
|
|
||
| An **Intermediary** is a Relying Party that requests attribute presentation from a Wallet Unit **on behalf of** another registered Relying Party (the **intermediated RP**). Typical examples: identity/interop gateways, sector platforms, or SaaS verifiers that serve multiple service providers. | ||
|
|
||
| This use case covers registration, intermediated remote presentation (OpenID4VP), and wallet-side trust evaluation. Protocol details and JSON examples: [RPI OpenID4VP technical report](../../task2-trust-framework/rp-intermediary-openid4vp-technical-report.md). | ||
|
|
||
| ## Actors | ||
|
|
||
| | Actor | Role | | ||
| | ----- | ---- | | ||
| | **Intermediary** | Registers as RP with `isIntermediary`; holds **WRPAC**; sends presentation requests | | ||
| | **Intermediated RP** | Registered at a Registrar; may hold **WRPRC** per intended use; instructs intermediary what to request | | ||
| | **Registrar** | Registers both parties; records `usesIntermediary` relationship (RPI_04) | | ||
| | **Access CA / WRPRC Provider** | Issues WRPAC to intermediary; WRPRC to intermediated RP | | ||
| | **Wallet Unit** | Authenticates intermediary; displays both identities; evaluates intermediated RP entitlements | | ||
| | **Holder (User)** | Approves or denies presentation | | ||
|
|
||
| ## Goal | ||
|
|
||
| - **Business**: Allow service providers to use a trusted third-party verifier without each holding a direct wallet connection, while keeping the User informed of **both** the technical caller and the service consuming the data. | ||
| - **Technical**: Intermediary authenticates with its WRPAC; intermediated RP identity and authorisation travel in `verifier_info`; wallet validates both per ARF Topic 52. | ||
|
|
||
| ## Scenarios | ||
|
|
||
| | ID | Scenario | Intermediated? | | ||
| | -- | -------- | -------------- | | ||
| | **S1** | Interop gateway requests PID for a cinema booking service | Yes | | ||
| | **S2** | Intermediary requests attributes for its **own** service | No (direct RP) | | ||
|
|
||
| ### S1 — Intermediated presentation (primary) | ||
|
|
||
| **Example:** *VerifyNow* (intermediary) requests age verification on behalf of *Example Cinema Ltd.* (intermediated RP). | ||
|
|
||
| **Preconditions** | ||
|
|
||
| - Intermediary registered with `isIntermediary: true` and valid **WRPAC**. | ||
| - Intermediated RP registered; intended use and optional **WRPRC** issued; `usesIntermediary` points to the intermediary (RPI_04). | ||
| - Intermediated RP provided the intermediary with: trade name, identifier, Registrar URL, intended-use id, attribute list, optional WRPRC reference (RPI_05). | ||
|
|
||
| **Main flow** | ||
|
|
||
| ```mermaid | ||
| sequenceDiagram | ||
| participant IRP as Intermediated RP | ||
| participant INT as Intermediary | ||
| participant W as Wallet Unit | ||
| participant U as User | ||
|
|
||
| IRP->>INT: Request attributes (RPI_05 metadata) | ||
| INT->>W: OpenID4VP Request Object<br/>(INT WRPAC + IRP verifier_info) | ||
| W->>W: Detect intermediation (RPI_07)<br/>Validate INT WRPAC + IRP WRPRC/registry | ||
| W->>U: Show INT and IRP names; request consent | ||
|
peppelinux marked this conversation as resolved.
Outdated
|
||
| U->>W: Approve or deny | ||
| W->>INT: Authorization Response (response_uri) | ||
| INT->>IRP: Forward attributes (RPI_08/09); delete after use (RPI_10) | ||
|
peppelinux marked this conversation as resolved.
Outdated
|
||
| ``` | ||
|
|
||
| 1. Intermediated RP instructs the intermediary (RPI_05). | ||
| 2. Intermediary builds and signs the OpenID4VP Request Object with its **WRPAC**; includes intermediated RP `registrar_dataset` and optional `registration_cert` in `verifier_info` (RPI_06, RPRC_19a). | ||
| 3. Wallet detects intermediation when WRPAC `organizationIdentifier` ≠ `registrar_dataset.identifier` (RPI_07). | ||
|
peppelinux marked this conversation as resolved.
Outdated
|
||
| 4. Wallet validates intermediary WRPAC (Access CA TL) and intermediated RP WRPRC/registry entitlements ([UC-TE-04](wallet-unit-evaluates-relying-party.md)). | ||
| 5. Wallet displays **both** trade names; User approves (RPA_07). | ||
| 6. If User opted to verify registration, Wallet checks intermediary–RP relationship via WRPRC `intermediary` field (RPRC_04) or Registrar API (RPI_07a). | ||
| 7. Wallet sends response to intermediary `response_uri`; intermediary forwards to intermediated RP. | ||
|
|
||
| **Postconditions (success)** | ||
|
|
||
| - User saw both intermediary and intermediated RP before consent. | ||
|
peppelinux marked this conversation as resolved.
Outdated
|
||
| - Attributes disclosed only match intermediated RP registered entitlements (RPRC_21). | ||
| - Intermediary deletes received credentials immediately after forwarding (RPI_10). | ||
|
|
||
| ### S2 — Intermediary as direct Relying Party | ||
|
|
||
| An entity registered as intermediary may also act **in its own capacity** (RPI_01 note c): WRPAC and `verifier_info` refer to the **same** party. Flow matches [UC-TE-04](wallet-unit-evaluates-relying-party.md) without dual-identity handling. | ||
|
|
||
| ## Onboarding (summary) | ||
|
|
||
| Detailed steps: [Relying Party Onboarding](../subtask1-1-onboarding/relying_party_onboarding.md). | ||
|
peppelinux marked this conversation as resolved.
Outdated
|
||
|
|
||
|
peppelinux marked this conversation as resolved.
Outdated
|
||
| | Step | Intermediary | Intermediated RP | | ||
| | ---- | ------------ | ---------------- | | ||
| | Register | As RP with `isIntermediary: true` (RPI_01, Reg_26) | At Registrar in establishment MS (RPI_03) | | ||
| | Relationship | — | Provide evidence of intermediary use; Registrar sets `usesIntermediary` (RPI_04) | | ||
| | Certificates | **WRPAC** (mandatory); own WRPRC only for direct use (S2) | **WRPRC** per intended use; includes `intermediary` association (RPRC_04) | | ||
| | Registry API | May register intended uses on behalf of WRP ([TS5 notes](../../task5-participants-certificates-policies/ts5-registry-api-and-data-formats.md)) | — | | ||
|
|
||
| **Note:** Intermediated RPs do **not** need a WRPAC (ARF §6.6.5). | ||
|
|
||
| ## Wallet evaluation checklist | ||
|
|
||
| | Check | Source | Applies to | | ||
| | ----- | ------ | ---------- | | ||
| | WRPAC chain + revocation | Access CA TL | Intermediary | | ||
|
peppelinux marked this conversation as resolved.
|
||
| | WRPRC signature + entitlements | WRPRC Provider TL / registry | Intermediated RP | | ||
| | Requested attributes ⊆ registered | RPRC_21 | Intermediated RP | | ||
| | Dual identity displayed | RPI_07 | Both | | ||
|
peppelinux marked this conversation as resolved.
Outdated
|
||
| | Relationship registered | RPI_07a, RPRC_04 | Intermediary ↔ IRP | | ||
|
peppelinux marked this conversation as resolved.
Outdated
|
||
| | EDP (if present) | EDP_02/03 | Evaluate against **intermediated** RP id/root, not intermediary WRPAC | | ||
|
|
||
| ## Success criteria | ||
|
|
||
| - Intermediary authenticated via valid WRPAC. | ||
| - Intermediated RP identity and entitlements verified (WRPRC or registry). | ||
| - User informed of both parties before consent. | ||
|
peppelinux marked this conversation as resolved.
Outdated
|
||
| - Intermediated transaction does not expose intermediary WRPRC in `verifier_info`. | ||
|
|
||
| ## ARF requirements (key) | ||
|
|
||
| | ID | Summary | | ||
| | -- | ------- | | ||
| | RPI_01 | Intermediary registers as RP; obtains WRPAC | | ||
| | RPI_03 | Intermediary registers each intermediated RP | | ||
| | RPI_04 | Registrar verifies and records intermediary relationship | | ||
| | RPI_05 | Intermediated RP supplies request metadata to intermediary | | ||
| | RPI_06 | Intermediary sends request with own WRPAC + IRP data/WRPRC | | ||
| | RPI_07 | Wallet detects and displays both identities | | ||
|
peppelinux marked this conversation as resolved.
Outdated
|
||
| | RPI_07a | Wallet verifies registered relationship when User requests | | ||
|
peppelinux marked this conversation as resolved.
Outdated
|
||
| | RPI_08–10 | Forwarding, verification, immediate deletion by intermediary | | ||
| | RPRC_04 | Intermediated WRPRC contains intermediary association | | ||
| | RPRC_19a | Registration data in presentation request extension | | ||
|
peppelinux marked this conversation as resolved.
Outdated
|
||
|
|
||
| Full matrix: [Trusted List / Registration / Trust Evaluation Matrix](../../task2-trust-framework/trusted-list-registration-trust-evaluation-matrix.md) §7. | ||
|
|
||
| ## Out of scope (this use case) | ||
|
|
||
| - Proximity presentation (ISO 18013-5 / TS 119 472-2 clause 5.3) — see technical report §12 | ||
| - Architecture-group implementation scenario variants ([architecture PR #31](https://github.com/webuild-consortium/architecture/pull/31)) | ||
|
|
||
| ## References | ||
|
|
||
| - [Consolidated Terms — Intermediary](../terms-and-entities.md#316-intermediary) | ||
| - [RPI OpenID4VP technical report](../../task2-trust-framework/rp-intermediary-openid4vp-technical-report.md) | ||
| - [EUDI Wallet Trust and Entitlement Discovery](../../task2-trust-framework/eudi-wallet-trust-and-entitlement-discovery.md) | ||
| - [WRPRC Example 3 — With Intermediary](../../task5-participants-policies/relying_party_registration_certificate.md) | ||
| - [Embedded Disclosure Policies](../../task5-participants-policies/embedded-disclosure-policies-implementation.md) | ||
| - [ARF Topic 52 — Relying Party intermediaries](https://eudi.dev/2.9.0/annexes/annex-2/annex-2.02-high-level-requirements-by-topic/#a2330-topic-52-relying-party-intermediaries) | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.