|
| 1 | +Issue verifiable credentials to learners |
| 2 | +======================================== |
| 3 | + |
| 4 | +Status |
| 5 | +------ |
| 6 | + |
| 7 | +Accepted |
| 8 | + |
| 9 | + |
| 10 | +Context |
| 11 | +------- |
| 12 | + |
| 13 | +As of July 2023, the Credentials Service is used as backend to support programs certificates. |
| 14 | +Administrators can configure certificates, and learners can view and share earned certificates with anyone |
| 15 | +to prove their achievements on the Open edX platform. |
| 16 | +However, the sharing options for earned credentials is very limited, also it's hard to verify printed credentials or |
| 17 | +get any additional information beyond the data explicitly included on the earned certificate. |
| 18 | + |
| 19 | +We want to adopt `verifiable credentials (VC)`_ to improve the sharing of the earned credentials, and enhance interoperability |
| 20 | +with external digital credentials platforms and wallets. |
| 21 | +This will allow learners to receive high-value credentials they can use in the real world. |
| 22 | + |
| 23 | +Every verifiable credential is a set of one or more claims made by an issuer about a subject – learner in the Open edX context. |
| 24 | +A verifiable credential is a tamper-evident credential that has authorship and can be cryptographically verified. |
| 25 | +After issuing a verifiable credential, it can be used to build a verifiable presentation, which can also be cryptographically verified. |
| 26 | + |
| 27 | +Verifiable credentials are closely related to decentralized digital identities and decentralized identifiers (DIDs). |
| 28 | +DID is a portable URL-based identifier, associated with an entity, a thing with distinct and independent existence such as person, |
| 29 | +organization, or device. |
| 30 | +DIDs are used in a verifiable credential to associate it with a subject, so that a verifiable credential itself can be easily ported |
| 31 | +from one repository to another without the need to reissue the credential. |
| 32 | +You can find more information on DIDs in the `W3C DID-core specification`_. |
| 33 | + |
| 34 | +Except `Verifiable Credentials Data Model v1.1`_, there are other standards |
| 35 | +that are based on the Verifiable Credentials, and therefore are fully compatible with it. |
| 36 | +The most prominent are 1EdTech `Open Badges v3.0`_ and `The European Blockchain Services Infrastructure (EBSI) Verifiable Credentials`_. |
| 37 | + |
| 38 | +The ecosystem of verifiable credentials is growing rapidly, and they are becoming more common in all types of education, |
| 39 | +including the formal, informal, and non-formal education. |
| 40 | +The Digital Credentials Consortium (DCC), and The European Blockchain Services Infrastructure (EBSI) |
| 41 | +are working towards making Verifiable Credentials accessible to anyone. |
| 42 | + |
| 43 | +This ADR describes the implementation of the Verifiable Credentials issuing mechanism, |
| 44 | +that will add the possibility to create and sign a verifiable credential, based on the user's achievements on the Open edX system. |
| 45 | + |
| 46 | + |
| 47 | + |
| 48 | +Decision |
| 49 | +-------- |
| 50 | + |
| 51 | +To issue verifiable credentials, it is decided to create a new Django application in the Credentials Service named `verifiable_credentials`. |
| 52 | +It will provide configuration options for verifiable credentials, interfaces, and utilities for verifiable credentials issuing. |
| 53 | + |
| 54 | +The new application should be optional to run for the deployers of the Open edX system, it should be toggled using DjangoSetting toggle. |
| 55 | + |
| 56 | +The application should provide extensibility options using plugins and other instruments, that will allow the Open edX deployers |
| 57 | +and contributors to easily implement and enable new verifiable credentials backends. |
| 58 | +These backends can be used to: |
| 59 | + |
| 60 | +* build JSON-LD documents based on several VC based standards, e.g., `Verifiable Credentials Data Model v1.1`_, |
| 61 | + `Open Badges v3.0`_, `EBSI Verifiable Credentials`_; |
| 62 | + |
| 63 | +* implement integrations with different verifiable credentials signing services, such as `SpruceID's didkit-python`_, `DCC's sign-and-verify`_, and other open-source and proprietary solutions. |
| 64 | + |
| 65 | +* issue credentials directly to different mobile and web digital credentials wallets, such as `DCC's Learner Credentials Wallet (LCW)`_. |
| 66 | + |
| 67 | +In addition to the new application, it was decided to implement three initial issuing and composition backends to: |
| 68 | + |
| 69 | +* transform user credentials as programs certificates, that are stored in the Credentials Service to `JSON-LD`_ according to `Open Badges v3.0`_ specification; |
| 70 | + |
| 71 | +* issue verifiable credentials directly to `DCC's Learner Credentials Wallet (LCW)`_; |
| 72 | + |
| 73 | +* sign verifiable credentials with the library `didkit-python`_, the python bindings for the open-source Rust-based `DIDKit`_ library maintained by SpruceID. |
| 74 | + |
| 75 | +We want to focus on the implementation of issuing the program certificates in the form of verifiable credentials, |
| 76 | +and eventually support other credentials types that are available in the Credentials Service as well. |
| 77 | + |
| 78 | +The issuer configuration would be set on the site or organization level. Administrator would have an option to enable verifiable credentials generation for some user credentials instances, and disable it for others. |
| 79 | + |
| 80 | +Learners will see the list of all earned credentials that can be issued in a form of the verifiable credentials upon learners' request. |
| 81 | + |
| 82 | + |
| 83 | +Consequences |
| 84 | +------------ |
| 85 | + |
| 86 | +Implementation of the verifiable credentials issuing mechanism in the Credentials Service will open new |
| 87 | +ways for learners to share and prove their achievements outside the Open edX platform. |
| 88 | + |
| 89 | + |
| 90 | +Rejected Alternatives |
| 91 | +--------------------- |
| 92 | + |
| 93 | +* Using `Open Badges v2.0`_ as the main digital credentials standard for sharing digital credentials. |
| 94 | + |
| 95 | +* Integration with `Europass Digital Credentials Infrastructure (EDCI)`_, the verifiable credentials standard based on XML documents. |
| 96 | + |
| 97 | +* Using `JWT`_ instead of `JSON-LD`_ as `verifiable credentials assertion format`_. |
| 98 | + |
| 99 | +* Integrate with the `DCC's sign-and-verify`_ REST API signing Node.JS server. |
| 100 | + |
| 101 | + |
| 102 | +References |
| 103 | +---------- |
| 104 | + |
| 105 | +`Design for verifiable credentials integration into the Open edX`_ |
| 106 | + |
| 107 | +`Verifiable Credentials for Education, Employment, and Achievement Use Cases`_ |
| 108 | + |
| 109 | + |
| 110 | + |
| 111 | +.. _`verifiable credentials (VC)`: https://www.w3.org/TR/vc-data-model/ |
| 112 | +.. _`Verifiable Credentials Data Model v1.1`: https://www.w3.org/TR/vc-data-model/ |
| 113 | +.. _`W3C DID-core specification`: https://www.w3.org/TR/did-core/ |
| 114 | +.. _`Open Badges v3.0`: https://1edtech.github.io/openbadges-specification/ob_v3p0.html |
| 115 | +.. _`The European Blockchain Services Infrastructure (EBSI) Verifiable Credentials`: https://ec.europa.eu/digital-building-blocks/wikis/display/EBSI/What+is+ebsi |
| 116 | +.. _`EBSI Verifiable Credentials`: https://ec.europa.eu/digital-building-blocks/wikis/display/EBSI/What+is+ebsi |
| 117 | +.. _`DCC's sign-and-verify`: https://github.com/digitalcredentials/sign-and-verify |
| 118 | +.. _`DCC's Learner Credentials Wallet (LCW)`: https://lcw.app/ |
| 119 | +.. _`MATTR wallet`: https://learn.mattr.global/docs/concepts/digital-wallets |
| 120 | +.. _`JSON-LD`: https://www.w3.org/TR/vc-data-model/#json-ld |
| 121 | +.. _`SpruceID's didkit-python`: https://github.com/spruceid/didkit-python |
| 122 | +.. _`didkit-python`: https://github.com/spruceid/didkit-python |
| 123 | +.. _`DIDKit`: https://github.com/spruceid/didkit |
| 124 | +.. _`Open Badges v2.0`: https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html |
| 125 | +.. _`Europass Digital Credentials Infrastructure (EDCI)`: https://github.com/european-commission-empl/European-Learning-Model |
| 126 | +.. _`JWT`: https://www.rfc-editor.org/rfc/rfc7519 |
| 127 | +.. _`verifiable credentials assertion format`: https://w3c.github.io/vc-imp-guide/#benefits-of-json-ld-and-ld-proofs |
| 128 | +.. _`Design for verifiable credentials integration into the Open edX`: https://openedx.atlassian.net/wiki/spaces/OEPM/pages/3490840577 |
| 129 | +.. _`Verifiable Credentials for Education, Employment, and Achievement Use Cases`: https://w3c-ccg.github.io/vc-ed-use-cases/ |
0 commit comments