Skip to content

Define the concept of a credential type #181

@danielfett

Description

@danielfett

We should define more clearly what a credential type (identified by the vct claim) actually means.

The current description is a bit handwavy and that may be a sign that we have not yet defined the concept well.

I think that there is a set of metadata usually associated with each SD-JWT VC type, for example

  • Display information for the whole credential
  • A schema for the JSON structure (may or may not be defined in JSON schema)
  • Information about the claims, including
    • Display information
    • Type information
    • Status information (self-attested vs. verified etc.)
  • Maybe: What kind of binding is supported/usually used for this credential type
  • Maybe: What issuers are allowed to issue this credential type

Such metadata would help Wallets (e.g., for displaying the credential to the user) and Verifiers (e.g., for determining the status of claims). It would also help developers of Verifiers, as they would get structured information about the credential they can expect.

The need for such metadata has been discussed in Issue #171 and similar approaches have shown up in HAIP.

The metadata may or may not be embedded into the credential itself, or provided externally. Assuming we allow for registered vct values (e.g., UniversityCredential), this metadata could go into the registry. It could also be distributed manually.

But it can also be made discoverable, e.g., by providing it at a .well-known URI derived from the URL in vct.


Here is a completely made-up example of what this metadata could look like:

{
    "vct": "https://credentials.example.com/example1",
    "display": [
        {
            "en-US": {
                "name": "University Credential",
                "logo": {
                    "url": "https://exampleuniversity.com/public/logo.png",
                    "alt_text": "a square logo of a university"
                },
                "background_color": "#12107c",
                "text_color": "#FFFFFF"
            }
        }
    ],
    "claims": // mapping from JSON pointer to information about this claim
    {
        "/name": {
            "display": {
                "de-DE": {
                    "label": "Vor- und Nachname",
                    "description": "Der Name des Studenten"
                },
                "en-US": {
                    "label": "Name",
                    "description": "The name of the student"
                }
            },
            "status": "verified"
        },
        "/degree": {
            "display": {
                "de-DE": {
                    "label": "Abschluss",
                    "description": "Der Abschluss des Studenten"
                },
                "en-US": {
                    "label": "Degree",
                    "description": "Degree earned by the student"
                }
            },
            "status": "verified"
        },
        // ...
        "/address": {
            "display": {
                "de-DE": {
                    "label": "Adresse",
                    "description": "Adresse zum Zeitpunkt des Abschlusses"
                },
                "en-US": {
                    "label": "Address",
                    "description": "Address at the time of graduation"
                }
            },
            "status": "self-attested"
        },
        "/address/street_address": {
            "display": {
                "de-DE": {
                    "label": "Straße"
                },
                "en-US": {
                    "label": "Street Address"
                }
            },
            "status": "self-attested"
        }
    }
}

Important:

  • This mechanism will not be format-agnostic, but defined only for SD-JWT VC for now.
  • There are overlaps with mechanisms defined in HAIP, for example, and part of this issue here is to figure out what data should go where and to avoid duplications by getting the concept right. I think that the claims element defined for the credential issuer metadata in HAIP could be replaced by just a vct identifier (the metadata could be discovered from there, or retrieved from the registry).

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions