Daniel Buchner
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
      • Invitee
    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Versions and GitHub Sync Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
Invitee
Publish Note

Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

Your note will be visible on your profile and discoverable by anyone.
Your note is now live.
This note is visible on your profile and discoverable online.
Everyone on the web can find and read all notes of this public team.
See published notes
Unpublish note
Please check the box to agree to the Community Guidelines.
View profile
Engagement control
Commenting
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
  • Everyone
Suggest edit
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
Emoji Reply
Enable
Import from Dropbox Google Drive Gist Clipboard
   owned this note    owned this note      
Published Linked with GitHub
Subscribed
  • Any changes
    Be notified of any changes
  • Mention me
    Be notified of mention me
  • Unsubscribe
Subscribe
# Identity Hub Attestation Flows and Components Contributors: * Daniel Buchner - Daniel.Buchner@microsoft.com * Cherie Duncan - Cherie.Duncan@dominode.com * John Toohey - john.toohey@dominode.com * Ron Kreutzer - ron@pillarproject.io * Stephen Curran - swcurran@cloudcompass.ca ## Abstract In this document, we define a set of user flows and describe the associated Action Objects that support a Hub-centric approach to the request, issuance, presentation, verification, and revocation of interoperable attestations. This document extends the [Identity Hub Explainer](https://github.com/decentralized-identity/hubs/blob/master/explainer.md). ## 1 Introduction In the digital identity space, Hubs let you securely store and share data. A Hub is a datastore containing semantic data objects at well-known locations. An identity needs to be able to prove that some data is true to another entity that requests it. These attestations are that method of proof. In the digital world, the requester may be software, and the response may or may not require involvement of the individual/identity who the proof is being made against. These examples and flows depict how attestations are requested and resolved. ## 2 Example Use Cases We use examples here to give guidance/suggestions for how attestations can be used with real world examples. The overall use case is a person, Alice who registers for College using that a process that includes using an attestation she possesses to prove she has received some required immunizations. After graduation, Alice requests an attestation from the College that she has graduated, and presents that attestation to her professional profile on a professional network. #### Agents We use the term “User Agent” (UA) to refer to an app on a smartphone or other device that has access to DID-linked keys and the power to do things on behalf of a DID owner (Alice). This could also be referred to as a digital wallet. Similarly, we use the term “Enterprise Agent” (EA) to refer to the comparable component representing an Organization – e.g. a College or professional network. A UA and EA are conceptually the same, but while the UA is likely a personal device (laptop, tablet, phone), an EA is likely a service that processes requests based on business rules and data held in back end systems. Note that an EA might need input from a specific member of the organization to complete the processing of a request. In that case, the EA might contact that user through that person’s User Agent (although there are many other possibilities). #### Sites In the examples below, “Sites” are assumed to be Web or Mobile Site – user interfaces that allow a user (in our case, Alice) to trigger the start of a process. There are many other ways to trigger the start of such a process. #### Decentralized IDs (DIDs), Documents and Attestations Each of Alice's Decentralized Identifiers (DIDs) referenced in the scenarios is generated and held by her user agent (UA) and used for a specific purpose - for example her relationship with the College. Each of her DIDs are not necessarily correlated to any other identifiers that make up her identity. Per the [W3C DID Specification](https://w3c-ccg.github.io/did-spec/), associated with a DID is a DID Document that contains information about the public keys and service endpoints for that DID. Thus, given a DID and DID Document for another Identity, an entity has a mechanism to resolve and communicate with the Identity Owner of the DID. DIDs may be public and stored on a publicly available Distributed Ledger, with their associated DID Document found via the [DIF Universal Resolver](https://github.com/decentralized-identity/universal-resolver), or may be pairwise private DIDs, where two Identities directly exchange DIDs/DID Documents. An attestation is something (such as a [Verifiable Credential](https://www.w3.org/TR/verifiable-claims-data-model/)) issued by an entity to a holder (often the subject of the attestation) so that the holder can prove they hold the attestation to others. In one of the examples below, for instance, Alice wants to receive a graduation attestation from the College so that they can present (prove) that attestation to a professional network. #### Interface Guidelines: Hubs, Agents and Identity Owners Some basic guidelines are defined about Hubs, Agents, and their Identity Owners: - Private keys are accessible only to Agents (User and Enterprise), thus any encrypting/signing of information must be done by an Agent. - In general, Hubs are addressable using the service pointers located in a DID Document, and Agents are addressed via a user's Hub. The only exception is invocation of a User Agent through direct mechanisms, like a deep link on a mobile site, a QR code on a Web site scanned by a User Agent, or a Bluetooth/NFC data exchange. - Hubs generally have limited, generic functionality, and any decision making must be made at the Agent level via a user app/device (User Agents) or more automated business services (Enterprise Agents). For simplicity we show the Hub and Enterprise Agent as a single entity in the following scenarios. In typical implementations, those will be separate entities that communicate to accomplish their respective activities. ### 2.1 Alice links to an Entity In order to communicate a request for attestation to an entity (in our examples, Alice), will first need to establish a connection between her user agent and the entity she will interact with. This is necessary for all follow-on scenarios. Alice wants to transact with the entities described in the scenarios with the intent to receive or exchange attestations. First and foremost, the entity must verify that Alice is the owner of the decentralized identifier she claims. In order to find Alice’s user agent, we leverage the Universal Resolver (UR) to lookup Alice’s Decentralized Identifier (DID) to find her DID Document (DDO). The keys located in Alice's DDO are used to authenticate Alice’s ownership of the DID, and determine access to Alice’s hub and user agent. ```sequence participant Universal Resolver as UR participant Entity Hub / EA as EH participant Entity Site as ES participant Alice UA as AUA participant Alice Hub as AH AUA-->ES: 1 Initiates DID Linkage ES-->AUA: 2 Prompts to disclose DID AUA-->ES: 3 Discloses DID ES-->EH: 4 Relay DID EH-->UR: 5 Lookup DID UR-->EH: 6 Return DDO EH-->AH: 7 DID Auth Challenge AH-->AUA: 8 DID Auth Challenge AUA-->EH: 9 DID Auth Response EH-->ES: 10 DID Auth Complete ``` 1. Alice navigates to an entity’s website and clicks a link to initiate a DID linkage with the entity. The content received from clicking the link includes DID information about the Enitity that Alice should use for the relationship. 1. Alice may have to use the Universal Resolver to access the DID Document associated with the DID. 2. The entity prompts for Alice to disclose a DID that represents her digital identity. 1. If the website was accessed via a laptop/desktop, the website typically displays a QR Code for Alice to use her mobile wallet app to scan the QR. If the website was accessed via her mobile device, a protocol handler raises Alice's AU app. 3. Alice selects an existing DID or creates a new DID for this relationship and sends the DID to the Entity Site. 4. The Entity Site passes the DID to the Entity’s Enterprise Agent to initiate the DID Auth response. 5. The EA uses the Universal Resolver (UR) to request retrieval of the DID Document that matches the provided DID. 6. The DID Document is returned to the EA. 7. The EA initiates the DID Auth process by issuing a challenge to Alice’s Hub. 8. Alice’s Hub passes the DID Auth challenge to Alice’s User Agent for signing. 9. Alice’s User Agent proves her identity with a signed response to the auth challenge. 10. The Entity Hub confirms the response and notifies the Entity Site with a successful login. #### 2.1.2 DIF Identity Hub 2FA A second identity linking scenario to consider is when Alice is registering with the site using a device that is not a UA, yet she still wants to use her UA to establish the connection. In this case, Alice discloses a DID connected to her UA to the site, the site contacts the UA and the mobile device containing the UA displays a code for Alice to use. Alice enters the code into a form on the site, proving that she controls the DID. ```sequence participant Universal Resolver as UR participant Entity Site as ES participant Alice Laptop as AD participant Alice Mobile UA as AM participant Alice Hub as AH AD-->ES: 1 Initiates DID Linkage ES-->AD: 2 Prompts to disclose DID AD-->ES: 3 Discloses DID ES-->UR: 4 Lookup DID UR-->ES: 5 Return DDO ES-->AH: 6 DID Auth challenge AH-->AM: 7 Challenge code displayed AD-->ES: 8 Enters challenge code ``` 1. Alice navigates to an entity’s website and clicks a link to initiate a DID linkage with the entity. 2. The entity prompts for Alice to disclose a DID that represents her digital identity. 3. Alice selects an existing DID and sends the DID to the Entity Site. 4. The Entity/EA uses the Universal Resolver (UR) to request retrieval of the DID Document that matches the provided DID. 5. The DID Document is returned to the Entity/EA. 6. The EA initiates the DID Auth process by issuing a challenge to Alice’s Hub. 7. Alice’s Hub passes the DID Auth challenge to Alice’s User Agent for signing. 8. Alice’s User Agent processes the challenge and displays on the mobile device a code expected by the Entity Site. 9. Alice on her laptop enters the code and the Entity Site confirms the response, resulting in a successful login. ### 2.2 Alice must provide preconditional proof Alice is attempting to register for College and her DID is already linked to the College. In this example, for Alice to get admitted to the College, Alice must prove she previously has received appropriate immunizations. #### Assumptions - Alice is linked to the College via her DID. - Alice has an Identity Hub accessed via an application on her mobile device. - Alice has a verified digital attestation for her previous immunizations. ```sequence participant College Hub / EA as CH participant College Site as CS participant Alice UA as AUA participant Alice Hub as AH AUA-->CS: 1 Trigger registration attestation request CS-->AH: 2 Action: PreconditionsAttestationAction (Immunizations) AH-->AUA: 3 Prompt with preconditions AUA-->CH: 4 Action: PresentAttestationAction (Immunizations) CH-->AH: 5 Action: DeliverAttestationAction (Registered) AH-->AUA: 6 Accept Attestation? AUA-->AH: 7 Store approved attestation ``` 1. Alice initiates a Registration request on the College Site. 2. The College EA determines there are preconditions for Registration: she must prove she has the required immunizations. The College EA initiates a request for presentation of the preconditions. 3. Alice is prompted by her UA to provide the preconditions. 4. Alice selects the correct attestation to use and her UA sends them back to the College Hub. 5. The College EA processes the preconditions and sends a Registered Student attestation to Alice's Hub. 6. Alice accepts the request to accept/store the College registration attestation. 7. Alice’s Hub stores the Registered Student attestation and broadcasts it to her connected devices. #### Referenced Action Objects - PreconditionsAttestationAction - PresentAttestationAction - DeliverAttestationAction ### 2.3 Alice obtains a diploma attestation In this example, Alice has graduated from College and wants to acquire a digital diploma attestation. #### Assumptions - Alice is linked to the College via her DID. - Alice has an Identity Hub accessed via an application on her mobile device. - Alice has graduated from College ```sequence participant College Hub / EA as CH participant College Site as CS participant Alice UA as AUA participant Alice Hub as AH AUA-->CS: 1 Triggers attestation request CS-->CH: 2 Determine available attestations CH-->AH: 3 Action: OfferAttestationAction AH-->AUA: 4 Select from offered attestations AUA-->CH: 5 Action: RequestAttestationAction CH-->AH: 7 Action: DeliverAttestationAction AH-->AUA: 8 Accept Attestation? AUA-->AH: 9 Approved for storage ``` 1. Alice initiates a request through the College website to obtain an attestation regarding her graduation. 2. College website reaches out to its Enterprise Agent service to determine what attestations are available for Alice. 3. The College's EA sends an attestation offer to Alice’s Hub. 4. Alice's UA receives a Action from the College EA that contains the attestations it can provide. Alice selects the attestations she wants. 5. Alice's UA sends an attestation request for her selected attestations to the College's Hub. 6. The EA delivers the attestations to Alice's Hub. 7. Alice is prompted to accept or deny the attestation. 8. Alice accepts the attestation and stores it across her Hubs and devices. Referenced Action Objects - OfferAttestationAction - RequestAttestationAction - DeliverAttestationAction ### 2.4 Alice shares her education verification, and future updates, with a professional networking site Alice has graduated from College, possesses an attestation from the College, and wants to share her existing and future education attestations with a professional networking site. #### Assumptions - The site has linked Alice to her DID via DID Auth. - Alice has an Identity Hub, accessible via an app on her mobile device. - Alice possesses an attestation for her college diploma. ```sequence participant Prof. Hub / EA as LH participant Prof. Site as LS participant Alice UA as AUA participant Alice Hub as AH AUA-->LS: 1 Trigger permission request LS-->AH: 2 Action: RequestPermissionAction AH-->AUA: 3 Prompt to grant permission AUA-->AH: 4 Generate permission and keys AH-->LH: 5 Action: GrantPermissionAction LH-->LS: 6 Notice of permission grant LS-->AH: 7 RetrieveAttestationsAction ``` 1. Alice navigates to the professional network site and initiates the flow to grant access to her educational attestations. 2. The website sends a `RequestPermissionAction` to Alice’s hub. 3. Alice’s Hub relays the request to Alice's UA, which prompts her to grant/deny permission. 4. Alice grants permission to access her current and future educational attestations by pushing a signed permission object and DID-specific keys to her Hub. 5. Alice’s Hub stores the keys she generated for the professional networking site, and relays a Action to the professional network's Hub to provide notice that their permission request has been granted. 6. The Prof Site is notified that the permission has been granted. 7. At any time in the future, the professional networking site can retrieve Alice’s education credentials from Alice’s Hub, based on the permissions she provided and using the private key held by the professional networking site. 1. Should the permission later be removed, the Prof Site's ability to retrieve updated credentials will be removed. Referenced Action Objects - RequestPermissionAction - GrantPermissionAction - RetrieveAttestationsAction ### 2.5 Alice applies for job and refuses to provide references Alice is applying for a job and has connected with the HR department via her DID. Alice has already provided some basic attestations about her right to work, name, address, etc. But when she receives a request for her references Alice refuses/denies the request as by the time this request comes in Alice has already accepted a position somewhere else (for example). #### Assumptions - Alice is linked to Company’s HR via her DID. - Alice has an Identity Hub accessed via an application on her mobile device. - Alice has a verified digital attestation for her references but does not wish to share them at this time, or Alice does not have references in her digital wallet yet. ```sequence participant HR Hub / EA as LH participant HR Site as LS participant Alice UA as AUA participant Alice Hub as AH LS-->AH: 1 Action: PreconditionsAttestationAction (References) AH-->AUA: 2 Prompt for reference disclosure AUA-->LH: 4 Action: DenyAttestationAction (Reason) LH-->LS: 5 Notice of refusal ``` 1. HR initiates a request for references via Alice’s Hub 2. Alice's Hub finds appropriate Attestations and provides them to Alice's User Agent. 3. For whatever reason, Alice refuses (via her agent) to provide references at this time 4. Alice’s Hub notifies HR Hub of the refusal (reason for refusal is optional) 5. A notification is sent to HR with the refusal details (generic or specific to the scenario) #### Referenced Action Objects - PreconditionAttestationAction - DenyAttestionAction ### 2.6 A bank sends Alice a contract that requires her DID signature, which she signs and delivers back to the bank. ```sequence participant App Hub / EA as LH participant App Site as LS participant Alice UA as AUA participant Alice Hub as AH LS-->AH: 1 Action: SignAttestationAction (Contract) AH-->AUA: 2 Prompt for signature AUA-->LH: 4 Action: DeliverAttestationAction (Contract) LH-->LS: 5 Notice of signing ``` #### Referenced Action Objects - SignAttestionAction - DeliverAttestationAction ### 2.7 The College determines Alice was issued a nursing certificate instead of her CS diploma, so they revoke the attestation and issue the correct one. ```sequence participant App Hub / EA as LH participant App Site as LS participant Alice UA as AUA participant Alice Hub as AH LS-->AH: 1 Action: RevokeAttestationAction (Old Diploma) AH-->AUA: 2 Notice of revocation LS-->AH: 3 Action: DeliverAttestationAction (New Diploma) AH-->AUA: 4 Accept Attestation? AUA-->AH: 5 Store accepted attestation ``` #### Referenced Action Objects - RevokeAttestationAction - DeliverAttestationAction ### 2.8 Alice retracts data access permission from a professional networking site. ```sequence participant Prof. Hub / EA as PH participant Prof. Site as PS participant Alice UA as AUA participant Alice Hub as AH AUA-->AH: 1 Remove Prof. permissions AH-->PH: 2 Action: RetractPermissionAction PH-->PS: 3 Notice of retraction request PS-->PH: 4 Signed reciept of retraction request PH-->AH: 5 Signed reciept response ``` Referenced Action Objects - RetractPermissionAction ### 2.9 Alice's College discovers they made a mistake on her diploma attestation, and sends her an amended attestation with the correct info. ```sequence participant College Site as CS participant Alice UA as AUA participant Alice Hub as AH CS-->AH: 1 Action: AmendAttestionAction (New + Old reference) AH-->AUA: 2 Accept Attestation? AUA-->AH: 3 Replace old with new attestation ``` #### Referenced Action Objects - AmendAttestionAction ## 3 Action Objects Identity Hub attestation handling relies on the passage and recognition of common Action types that Hubs, User Agents, and consuming apps/services understand. In order to ensure that the flows related to attestations are precise and maximally descriptive of their intent, the Identity Hub spec will define its own Action objects for each of the relevant attestation actions. These objects are extensions of the Schema.org Action object, the schema origin of which shall be schema.identity.foundation. These objects are strictly a shared means of communicating and facilitating the various activities related to attestations, they do not infer or require a specific type of proof format or material be used within them. Note that each Action returns only a status of whether the Action was successfully (or not) transmitted. The result of processing the request is conveyed to the caller via a subsequent Action. The following is a description of the objects and examples that encompass their structure and properties: ### 3.1 RequestAttestationAction The Holder requests an attestation from an Issuer. - Type of attestation wanted - List of tag strings to describe the attestation - Detailed, human-readable description of the attestation being requested (mostly for UAs to display to users) - Who is the attestation for? - What format do you need it in? - Enable passing of preconditions - Option to set a deadline for issuance/fulfillment ```json { "@context": "http://schema.identity.foundation/", "@type": "RequestAttestationAction", "identifier": UNIQUE_ID, "for": ["did:foo:123-456"], "format": CLAIM_FORMAT, "expiration": EPOCH_TIME, "description": "Province of British Columbia Driver’s License", "tags": ["license", "driving", "permit", "DL", "driver’s license"], "preconditions": ARRAY_OF_PRECONDITION_PROOFS (optional) } ``` ### 3.2 DenyAttestationAction In response to a request for an Attestation, a Verifier/Issuer informs a Holder that the attestation cannot be provided. This `Action` inherits from schema.org's `RejectAction`. - Linked attestation action ID - Reason for refusing the Request Attestation Action. ```json { "@context": "http://schema.identity.foundation/", "@type": "DenyAttestationAction", "identifier": UNIQUE_ID, "purpose": "We cannot issue your diploma, you have not graduated." } ``` ### 3.3 PreconditionsAttestationAction In response to a request for an Attestation, a Verifier/Issuer informs a Holder a list of Pre-Conditions that must be met before the requested Attestation can be issued. - Linked attestation action ID - Specify set of preconditions, each with their own descriptors ```json { "@context": "http://schema.identity.foundation/", "@type": "PreconditionsAttestationAction", "identifier": UNIQUE_ID, "preconditions": ARRAY_OF_PRECONDITION_DESCRIPTORS } ``` ### 3.4 OfferAttestationAction In response to a request for an Attestation that cannot be issued because that type is not available, provide to the Holder a list of attestations that ARE available. - For each attestation type available to the requester: - Type of attestation - List of tag strings to describe the attestation - Detailed, human-readable description of the attestation being requested (mostly for UAs to display to users) - Formats available for the attestation ```json { "@context": "http://schema.identity.foundation/", "@type": "OfferAttestationAction", "identifier": UNIQUE_ID, "availableAttestations": ARRAY_OF_ATTESTATION_DESCRIPTORS } ``` ### 3.5 DeliverAttestationAction Used by any party that delivers a finalized attestation to a target entity. This `Action` inherits from schema.org's `SendAction`. - Linked attestation action ID - Payload of the proof material - Format if the proof material - Time delivered ```json { "@context": "http://schema.identity.foundation/", "@type": "DeliverAttestationAction", "identifier": "UNIQUE_ID", "object": ATTESTATION_PAYLOAD, "description": "Province of British Columbia Driver’s License", "tags": ["license", "driving", "permit", "DL", "driver’s license"] } ``` ### 3.6 PresentAttestationAction This Action is the envelop used to present an attestation to an inspecting party. - List of tag strings to describe the attestation - Detailed, human-readable description of the attestation being requested (mostly for UAs and EAs to reason over and use in display) - Format of the attestation payload - The attestation payload ```json { "@context": "http://schema.identity.foundation/", "@type": "PresentAttestationAction", "object": ATTESTATION_PAYLOAD, "description": "MIT Diploma for B.S. in Computer Science", "tags": ["diploma", "degree"] } ``` ### 3.7 SignAttestationAction A party sends a Action to a target prompting them to sign the provided attestation payload. This `Action` inherits from schema.org's `EndorseAction`. - Linked attestation action ID - Payload of the proof material - Format of the proof material - Time delivered ```json { "@context": "http://schema.identity.foundation/", "@type": "SignAttestationAction", "identifier": UNIQUE_ID, "object": ATTESTATION_PAYLOAD, "description": "Loan for 123 Main Street, Anytown USA" } ``` ### 3.8 RevokeAttestationAction The party that previously supplied an attestation sends a notice to the attestation owner/holder that issuing party has revoked the attestation. This `Action` inherits from schema.org's `DeactivateAction`. - Attestation ID - Revocation code - array of revocation codes (look for an existing standard) - Reason for revocation - array of human-readable descriptions of the reason, or URI ```json { "@context": "http://schema.identity.foundation/", "@type": "RevokeAttestationAction", "identifier": UNIQUE_ID, "object": ATTESTATION_PAYLOAD, "result": REVOCATION_RECORD, "purpose": "Your driver's license was revoked." } ``` ### 3.9 AmendAttestationAction Require past ID, optionally include previous attestation. This `Action` inherits from schema.org's `ReplaceAction`. - Attestation ID - Change delta of some kind - Reason for amendment - array of human-readable descriptions of the reason, or URI ```json { "@context": "http://schema.identity.foundation/", "@type": "AmendAttestationAction", "identifier": UNIQUE_ID, "object": ATTESTATION_PAYLOAD, "purpose": "Your driver's license was amended with your latest picture" } ``` ### 3.10 RequestPermissionAction Request permission for access to a DID's Identity Hub data. This `Action` inherits from schema.org's `AuthorizeAction`. - Permission being requested - Intended use of data being requested ```json { "@context": "http://schema.identity.foundation/", "@type": "RequestPermissionAction", "object": PERMISSION_OCAP, "purpose": "Display and filtering on a professional network", } ``` ### 3.11 GrantPermissionAction The party that allows a permission sends a notice to the requesting party to let them know the permission has been granted. This `Action` inherits from schema.org's `AcceptAction`. - Permission being requested - Intended use of data being requested ```json { "@context": "http://schema.identity.foundation/", "@type": "GrantPermissionAction", "object": PERMISSION_OCAP } ``` ### 3.12 DenyPermissionAction The party evaluating the permission request does not grant the permission, and sends the requesting party a notice of the denial. This `Action` inherits from schema.org's `RejectAction`. There is not currently an example of this action in the scenarios in Section 2 of this document. - Permission being requested - Intended use of data being requested ```json { "@context": "http://schema.identity.foundation/", "@type": "DenyPermissionAction", "object": PERMISSION_OCAP, "purpose": "I do not want to allow you access at this time", } ``` ### 3.13 RetractPermissionAction The party that has previously issued a permission granting access sends a notice to the affected party to let them know the permission has been retracted. This `Action` inherits from schema.org's `DeleteAction`. - Permission being retracted ```json { "@context": "http://schema.identity.foundation/", "@type": "RetractPermissionAction", "object": PERMISSION_OCAP, "purpose": "I no longer want you to have access to my attestations", } ``` ### 3.14 RetrieveAttestationsAction Used by any party that has been granted permission access to a set of Attestations via the GrantPermissionAction to retrieve a set of Attestations. ```json { "@context": "http://schema.identity.foundation/", "@type": "RetrieveAttestationsAction", "identifier": "UNIQUE_ID", "object": ATTESTATION_PAYLOAD, "description": "Province of British Columbia Driver’s License", "tags": ["license", "driving", "permit", "DL", "driver’s license"] } ``` ## 4 Glossary - **Decentralized Identifier**: Decentralized Identifiers (DIDs) are a new type of identifier for verifiable, "self-sovereign" digital identity. DIDs are fully under the control of the DID subject, independent from any centralized registry, identity provider, or certificate authority. - **DID**: Decentralized Identifier - **DID Auth**: Authentication of an Identity by verifying the Identities control of it's DID - **DID Document**: The control document that specifies keys, service endpoints, and other basic details about a DID. - **DDO**: Abbreviation for a DID Document - **EA**: Enterprise Agent: a HUB-aware service that integrates with an Enterprise’s backend systems and representatives to process HUB requests. Conceptually equivalent to a person’s UA, but for an organization. - **UA**: Abbreviation for User Agent - **Universal Resolver**: A mechanism of getting the DID Document associated with a DID across any (supported) DID implementation - **UR**: Abbreviation for Universal Resolver - **User Agent**: a smartphone-based digital wallet, browser ## 5 Technical & Spec Implications - For the Hub /permission spec: add optional timeout for permissions

Import from clipboard

Paste your markdown or webpage here...

Advanced permission required

Your current role can only read. Ask the system administrator to acquire write and comment permission.

This team is disabled

Sorry, this team is disabled. You can't edit this note.

This note is locked

Sorry, only owner can edit this note.

Reach the limit

Sorry, you've reached the max length this note can be.
Please reduce the content or divide it to more notes, thank you!

Import from Gist

Import from Snippet

or

Export to Snippet

Are you sure?

Do you really want to delete this note?
All users will lose their connection.

Create a note from template

Create a note from template

Oops...
This template has been removed or transferred.
Upgrade
All
  • All
  • Team
No template.

Create a template

Upgrade

Delete template

Do you really want to delete this template?
Turn this template into a regular note and keep its content, versions, and comments.

This page need refresh

You have an incompatible client version.
Refresh to update.
New version available!
See releases notes here
Refresh to enjoy new features.
Your user state has changed.
Refresh to load new user state.

Sign in

Forgot password

or

By clicking below, you agree to our terms of service.

Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
Wallet ( )
Connect another wallet

New to HackMD? Sign up

Help

  • English
  • 中文
  • Français
  • Deutsch
  • 日本語
  • Español
  • Català
  • Ελληνικά
  • Português
  • italiano
  • Türkçe
  • Русский
  • Nederlands
  • hrvatski jezik
  • język polski
  • Українська
  • हिन्दी
  • svenska
  • Esperanto
  • dansk

Documents

Help & Tutorial

How to use Book mode

Slide Example

API Docs

Edit in VSCode

Install browser extension

Contacts

Feedback

Discord

Send us email

Resources

Releases

Pricing

Blog

Policy

Terms

Privacy

Cheatsheet

Syntax Example Reference
# Header Header 基本排版
- Unordered List
  • Unordered List
1. Ordered List
  1. Ordered List
- [ ] Todo List
  • Todo List
> Blockquote
Blockquote
**Bold font** Bold font
*Italics font* Italics font
~~Strikethrough~~ Strikethrough
19^th^ 19th
H~2~O H2O
++Inserted text++ Inserted text
==Marked text== Marked text
[link text](https:// "title") Link
![image alt](https:// "title") Image
`Code` Code 在筆記中貼入程式碼
```javascript
var i = 0;
```
var i = 0;
:smile: :smile: Emoji list
{%youtube youtube_id %} Externals
$L^aT_eX$ LaTeX
:::info
This is a alert area.
:::

This is a alert area.

Versions and GitHub Sync
Get Full History Access

  • Edit version name
  • Delete

revision author avatar     named on  

More Less

Note content is identical to the latest version.
Compare
    Choose a version
    No search result
    Version not found
Sign in to link this note to GitHub
Learn more
This note is not linked with GitHub
 

Feedback

Submission failed, please try again

Thanks for your support.

On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

Please give us some advice and help us improve HackMD.

 

Thanks for your feedback

Remove version name

Do you want to remove this version name and description?

Transfer ownership

Transfer to
    Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

      Link with GitHub

      Please authorize HackMD on GitHub
      • Please sign in to GitHub and install the HackMD app on your GitHub repo.
      • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
      Learn more  Sign in to GitHub

      Push the note to GitHub Push to GitHub Pull a file from GitHub

        Authorize again
       

      Choose which file to push to

      Select repo
      Refresh Authorize more repos
      Select branch
      Select file
      Select branch
      Choose version(s) to push
      • Save a new version and push
      • Choose from existing versions
      Include title and tags
      Available push count

      Pull from GitHub

       
      File from GitHub
      File from HackMD

      GitHub Link Settings

      File linked

      Linked by
      File path
      Last synced branch
      Available push count

      Danger Zone

      Unlink
      You will no longer receive notification when GitHub file changes after unlink.

      Syncing

      Push failed

      Push successfully