DCQL skaidrojums: kā pārbaudītājs no maka pieprasa tieši to, kas tam vajadzīgs
Digital Credentials Query Language, DCQL, ir JSON vaicājumu formāts, ko OpenID4VP izmanto prezentācijas pieprasījumā. Tas ļauj paļāvīgajai pusei aprakstīt, kurus akreditācijas datus un kurus apgalvojumus tajos tā vēlas redzēt, tādā veidā, ko jebkurš atbilstīgs maks var apstrādāt bez īpašas integrācijas.
Problēma, ko DCQL risina
Uzņēmuma makā var glabāties akreditācijas dati vairākos formātos: uzņēmuma reģistrācija kā SD-JWT VC, profesionālā kvalifikācija mdoc formātā, W3C verifiable credential no agrāka pilotprojekta. Pārbaudītājam, kuram jāapstiprina tikai reģistrācijas numurs un juridiskais nosaukums, nav pārnesama veida, kā pieprasīt tieši to neatkarīgi no formāta, ja vien tas nepieņem visus akreditācijas datus vai manuāli neizveido atsevišķu pieprasījumu katram formātam un katram maka piegādātājam.
DCQL novērš šo plaisu pieprasījuma pusē. Tas ir viens JSON objekts, iegults OpenID4VP autorizācijas pieprasījumā, kas nosauc vienu vai vairākus akreditācijas vaicājumus, katru piesaistītu formātam un apgalvojumu ceļu kopai. Maks izvērtē vaicājumu attiecībā pret saglabātajiem akreditācijas datiem, nosaka, kuri atbilst, un tikai tad lūdz turētājam apstiprināt tieši šo apgalvojumu izpaušanu. Pārbaudītājs saņem paredzamu struktūru neatkarīgi no tā, kuru maku turētājs izmantoja.
1. Pārbaudītājs
Nosūta OpenID4VP pieprasījumu ar dcql_query
2. Maks
Salīdzina vaicājumu ar saglabātajiem akreditācijas datiem
3. Turētājs
Apstiprina tikai pieprasīto apgalvojumu izpaušanu
4. Pārbaudītājs
Saņem vienu prezentāciju katram akreditācijas vaicājuma id
DCQL vaicājuma uzbūve
DCQL vaicājums ir viens JSON objekts ar masīvu credentials un, pēc izvēles, masīvu credential_sets. Katrs ieraksts masīvā credentials ir akreditācijas vaicājums. Ar M atzīmētie lauki šajā vaicājumā ir obligāti.
dcql_query
credentials[ ]
Viens vaicājums katram nepieciešamajam akreditācijas datu kopumam
id + format
Kuri akreditācijas dati, kādā formātā
meta
Tipa filtrs, piemēram, vct_values
claims[ ]
Izpaužamo apgalvojumu ceļi
claim_sets[ ]
Pieņemamās apgalvojumu kombinācijas
credential_sets[ ]
Neobligāti: kuras akreditācijas vaicājumu kombinācijas izpilda pieprasījumu
| Lauks | Tips | Obligāts |
|---|---|---|
| id | string | M |
| format | enum: dc+sd-jwt | mso_mdoc | jwt_vc_json | ldp_vc | M |
| meta | objekts, uzbūve atkarīga no formāta | |
| claims | apgalvojumu vaicājumu masīvs | |
| claim_sets | apgalvojumu id masīvu masīvs | |
| trusted_authorities | objektu masīvs ar tipu un vērtībām |
Katrs ieraksts masīvā claims arī ir objekts: id, ar kuru uz to atsaucas no claim_sets, path, masīvs, kas norāda apgalvojuma atrašanās vietu akreditācijas datos (piemēram, ["legal_name"] augstākā līmeņa SD-JWT apgalvojumam vai ["org", "registration_number"] ligzdotam), un pēc izvēles values, vērtību saraksts, kurām apgalvojumam jāatbilst.
Piemērs: uzņēmuma reģistrācijas pārbaude
Uzņēmuma reģistrācija
dc+sd-jwtPārbaudītājs saka: lūk, ko vēlos saņemt
- ✓ Reģistrācijas numursreg_nopath: ["registration_number"]
- ✓ Juridiskais nosaukumslegal_namepath: ["legal_name"]
- ✓ Reģistrācijas valstsreg_countrypath: ["registration_country"]
{
"credentials": [
{
"id": "company_registration",
"format": "dc+sd-jwt",
"meta": {
"vct_values": ["urn:eudi:business:company-registration:1"]
},
"claims": [
{ "id": "reg_no", "path": ["registration_number"] },
{ "id": "legal_name", "path": ["legal_name"] },
{ "id": "reg_country", "path": ["registration_country"] }
]
}
]
}Maka atbildes piemērs
Maks atbild ar objektu vp_token, kura atslēgas ir akreditācijas vaicājumu id. Katra vērtība ir prezentāciju masīvs. Formātam dc+sd-jwt prezentācija ir izdevēja parakstīts JWT, viens disclosure katram izpaustajam apgalvojumam un key binding JWT, kas to piesaista šī pieprasījuma nonce un klientam.
Ko maks nosūta
{
"vp_token": {
"company_registration": [
"<issuer-signed JWT>~<disclosure: registration_number>~<disclosure: legal_name>~<disclosure: registration_country>~<key binding JWT>"
]
}
}Apgalvojumi, ko pārbaudītājs redz pēc validācijas
{
"vct": "urn:eudi:business:company-registration:1",
"registration_number": "12345678",
"legal_name": "Example Logistics B.V.",
"registration_country": "NL"
}Rezerves varianta pieprasīšana: claim_sets
claim_sets uzskaita apgalvojumu id grupas prioritātes secībā. Maks atgriež pirmo grupu, ko var pilnībā izpildīt ar to, kas turētājam patiešām ir, tāpēc pārbaudītājam nav jāsūta divi atsevišķi pieprasījumi precīzajam un rezerves gadījumam.
Piemērs: reģistrācijas numurs vai rezervē tikai juridiskais nosaukums
1. Vēlamais
Tiek atgriezts, ja akreditācijas datos ir abi apgalvojumi
2. Rezerve
Tiek atgriezts tikai tad, ja pirmo kopu nevar izpildīt
{
"credentials": [
{
"id": "company_registration",
"format": "dc+sd-jwt",
"meta": { "vct_values": ["urn:eudi:business:company-registration:1"] },
"claims": [
{ "id": "reg_no", "path": ["registration_number"] },
{ "id": "legal_name", "path": ["legal_name"] }
],
"claim_sets": [
["reg_no", "legal_name"],
["legal_name"]
]
}
]
}Šeit pārbaudītājs dod priekšroku reģistrācijas numuram kopā ar juridisko nosaukumu, bet pieņems arī tikai juridisko nosaukumu, ja turētāja akreditācijas datos nav reģistrācijas numura apgalvojuma.
Atbildes piemērs: izmantots rezerves variants
Ko maks nosūta
{
"vp_token": {
"company_registration": [
"<issuer-signed JWT>~<disclosure: legal_name>~<key binding JWT>"
]
}
}Apgalvojumi, ko pārbaudītājs redz pēc validācijas
{
"vct": "urn:eudi:business:company-registration:1",
"legal_name": "Example Logistics B.V."
}Turētāja akreditācijas datos nav reģistrācijas numura, tāpēc maks izpildīja otro apgalvojumu kopu un izpauda vienu disclosure. Atbildē nav norādīts, kura kopa izmantota: pārbaudītājs to secina no saņemtajiem apgalvojumiem.
Akreditācijas datu apvienošana: credential_sets
credential_sets darbojas vienu līmeni augstāk nekā claim_sets. Katrs ieraksts uzskaita options, kur katra opcija ir akreditācijas vaicājumu id grupa. Makam jāizpilda viena opcija no katra obligātā ieraksta, kas pārbaudītājam dod AND un OR loģiku starp akreditācijas datiem vienā pieprasījumā.
Obligāts
Uzņēmuma reģistrācija
Viens no
PVN reģistrācija
Viens no
Bankas konta apliecinājums
"credential_sets": [
{ "options": [["company_registration"]] },
{ "options": [["vat_registration"], ["bank_account"]] }
]Atbildes piemērs: reģistrācija un bankas konts
Ko maks nosūta
{
"vp_token": {
"company_registration": [
"<issuer-signed JWT>~<disclosures>~<key binding JWT>"
],
"bank_account": [
"<issuer-signed JWT>~<disclosures>~<key binding JWT>"
]
}
}Apgalvojumi, ko pārbaudītājs redz pēc validācijas
{
"company_registration": {
"vct": "urn:eudi:business:company-registration:1",
"registration_number": "12345678",
"legal_name": "Example Logistics B.V."
},
"bank_account": {
"vct": "urn:eudi:business:bank-account:1",
"iban": "NL91ABNA0417164300",
"account_holder": "Example Logistics B.V."
}
}Turētājam nav PVN reģistrācijas akreditācijas datu, tāpēc maks izvēlējās otrās kopas otro opciju. Neizmantoto vaicājumu id, šeit vat_registration, vp_token vienkārši nav.
Tikai uzticami izdevēji: trusted_authorities
trusted_authorities sašaurina akreditācijas vaicājumu līdz akreditācijas datiem, kuru izdevēju atbalsta pārbaudītājam uzticama iestāde. Katram ierakstam ir tips un vērtību saraksts: aki iestādes atslēgas identifikatoram, etsi_tl ETSI uzticamo sarakstam vai openid_federation federācijas uzticības enkuram. Maks piedāvā tikai atbilstošus akreditācijas datus.
Piemērs: reģistrācija no saraksta izdevēja
Pārbaudītājs saka: tikai no izdevējiem šajā uzticamo sarakstā
https://ec.europa.eu/tools/lotl/eu-lotl.xml
Reģistrācijas akreditācijas dati no saraksta izdevēja
izdevējs ir uzticamo sarakstā
✓ Atbilst vaicājumam
Reģistrācijas akreditācijas dati no izdevēja ārpus saraksta
izdevējs nav uzticamo sarakstā
✗ Neatbilst, turētājam netiek piedāvāts
{
"credentials": [
{
"id": "company_registration",
"format": "dc+sd-jwt",
"meta": { "vct_values": ["urn:eudi:business:company-registration:1"] },
"trusted_authorities": [
{
"type": "etsi_tl",
"values": ["https://ec.europa.eu/tools/lotl/eu-lotl.xml"]
}
],
"claims": [
{ "id": "reg_no", "path": ["registration_number"] },
{ "id": "legal_name", "path": ["legal_name"] }
]
}
]
}Atbildes piemērs: tikai saraksta izdevēja akreditācijas dati
Ko maks nosūta
{
"vp_token": {
"company_registration": [
"<issuer-signed JWT>~<disclosure: registration_number>~<disclosure: legal_name>~<key binding JWT>"
]
}
}Apgalvojumi, ko pārbaudītājs redz pēc validācijas
{
"vct": "urn:eudi:business:company-registration:1",
"registration_number": "12345678",
"legal_name": "Example Logistics B.V."
}Turētājam bija arī reģistrācijas akreditācijas dati no izdevēja ārpus saraksta, taču maks tos nepiedāvāja. trusted_authorities ir filtrs makam, nevis garantija: validējot prezentāciju, pārbaudītājs pats pārbauda izdevēju pret uzticamo sarakstu.
Vērtības atbilstība: claims.values
Apgalvojuma vaicājumā var būt values, virkņu, veselu skaitļu vai Būla vērtību saraksts. Maks atgriež apgalvojumu tikai tad, ja tā tips un vērtība precīzi atbilst kādai no tām, tāpēc pārbaudītājs var pārbaudīt nosacījumu, iepriekš neko citu nepieprasot.
Piemērs: tikai Nīderlandē vai Beļģijā reģistrēti uzņēmumi
Pārbaudītājs saka: tikai uzņēmums, kas reģistrēts kādā no šīm valstīm
Nīderlandes uzņēmums
registration_country: "NL"
✓ Atbilst vaicājumam
Vācijas uzņēmums
registration_country: "DE"
✗ Neatbilst, turētājam netiek piedāvāts
{
"credentials": [
{
"id": "company_registration",
"format": "dc+sd-jwt",
"meta": { "vct_values": ["urn:eudi:business:company-registration:1"] },
"claims": [
{ "id": "legal_name", "path": ["legal_name"] },
{
"id": "reg_country",
"path": ["registration_country"],
"values": ["NL", "BE"]
}
]
}
]
}Atbildes piemērs: Nīderlandes uzņēmums
Ko maks nosūta
{
"vp_token": {
"company_registration": [
"<issuer-signed JWT>~<disclosure: legal_name>~<disclosure: registration_country>~<key binding JWT>"
]
}
}Apgalvojumi, ko pārbaudītājs redz pēc validācijas
{
"vct": "urn:eudi:business:company-registration:1",
"legal_name": "Example Logistics B.V.",
"registration_country": "NL"
}Vācijas uzņēmuma akreditācijas datos ir registration_country "DE", tāpēc tie neizpilda vaicājumu un makam par tiem nav ko atgriezt. Pārbaudītājam tomēr jāpārbauda vērtība validētajos apgalvojumos, nevis jāpaļaujas uz maka filtrēšanu.
Formātam specifiski ierobežojumi laukā meta
SD-JWT VC: vct_values
Formātam dc+sd-jwt meta.vct_values uzskaita akreditācijas datu tipu identifikatorus, ko pārbaudītājs pieņems. Vaicājums atbilst tikai tādiem saglabātajiem akreditācijas datiem, kuru vct ir viena no uzskaitītajām vērtībām, tāpēc pārbaudītājs, kas uzticas tikai viena izdevēja reģistrācijas akreditācijas datu tipam, norāda tieši šo identifikatoru.
mso_mdoc: doctype_value un namespace
Formātam mso_mdoc meta.doctype_value nosaka ISO 18013-5 DocType, un katrs apgalvojuma ceļš sākas ar mdoc namespace, kurā apgalvojums atrodas, nevis ar vienkāršu lauka nosaukumu, jo mdoc grupē apgalvojumus pēc namespace, nevis plakanā objektā.
DCQL statuss šodien
- DCQL ir definēts pašā OpenID4VP specifikācijā, nevis kā atsevišķs dokuments, un ir bijis daļa no melnraksta kopš brīža, kad mehānisms tika ieviests, lai aizstātu agrāko atkarību no DIF Presentation Exchange OpenID4VP pieprasījumiem.
- EUDI Wallet Architecture and Reference Framework nosaka OpenID4VP kā prezentācijas protokolu un līdz ar to DCQL kā vaicājumu mehānismu, kas ekosistēmas paļāvīgajām pusēm un makiem būtu jāatbalsta.
- Maku un pārbaudītāju atsauces implementācijas programmā EUDI Wallet Reference Implementation ir vienojušās par DCQL, tāpēc jaunām uzņēmumu maku integrācijām, kas šodien tiek veidotas uz OpenID4VP, prezentācijas pieprasījumu vaicājumu formātam būtu jāparedz DCQL, nevis Presentation Exchange.
Saistītie termini
Biežāk uzdotie jautājumi
Ar ko DCQL atšķiras no DIF Presentation Exchange?
Abi apraksta, ko pārbaudītājs vēlas saņemt no maka, taču DCQL attiecas tikai uz OpenID4VP un ir definēts tieši šajā specifikācijā, savukārt Presentation Exchange ir atsevišķa DIF specifikācija, kas aptver arī citus protokolus. DCQL ir apzināti mazāks: tajā nav input descriptor grupu un submission requirements, un formātam specifiskus ierobežojumus, piemēram, mdoc doctype vai SD-JWT VC tipu, tas izsaka tieši vaicājuma objektā, nevis ar vispārīgu JSON Schema filtru. EUDI Wallet ekosistēma OpenID4VP prezentācijām ir standartizējusies uz DCQL.
Vai viens DCQL vaicājums var pieprasīt vairākus akreditācijas datu kopumus?
Jā. Masīvā credentials var norādīt vairākus akreditācijas vaicājumus, katru ar savu id. Maks, kuram ir atbilstības katram ierakstam, atgriež vienu prezentāciju katram ierakstam. Papildus tam neobligātais objekts credential_sets var pieprasīt noteiktas kombinācijas, piemēram, pieņemt vai nu tikai uzņēmuma reģistrācijas akreditācijas datus, vai uzņēmuma reģistrācijas akreditācijas datus kopā ar UBO deklarāciju, neprasot turētājam divreiz.
Kādu problēmu claim_sets risina viena akreditācijas vaicājuma ietvaros?
Akreditācijas datos ne vienmēr ir katrs apgalvojums, ko pārbaudītājs vēlētos. claim_sets uzskaita alternatīvas apgalvojumu id grupas, no kurām katra pati par sevi izpildītu pieprasījumu, sakārtotas no vēlamākās līdz vismazāk vēlamajai. Maks izvēlas pirmo grupu, ko var pilnībā izpildīt ar apgalvojumiem, kas turētājam patiešām ir, tāpēc pārbaudītājs var pieprasīt precīzu identifikācijas numuru, ja tas pieejams, un izmantot aptuvenāku pārbaudi, piemēram, pilngadības pazīmi, nesūtot divus atsevišķus pieprasījumus.
Vai DCQL ir paredzēts tikai EUDI Wallet?
Nē. DCQL ir daļa no OpenID4VP pamatspecifikācijas, un to var izmantot jebkura OpenID4VP implementācija. EUDI Wallet ekosistēma ir nozīmīgs tā lietotājs: Architecture and Reference Framework nosaka OpenID4VP ar DCQL kā prezentācijas mehānismu, kas paļāvīgajām pusēm jāatbalsta, tāpēc tas ir īpaši svarīgs makiem un pārbaudītājiem, kas veidoti Eiropas tirgum.
Vai DCQL pats veic selektīvu izpaušanu?
Nē. DCQL tikai apraksta, kas tiek pieprasīts. Tas, vai maks var izpaust tieši šos apgalvojumus un neko citu, ir atkarīgs no akreditācijas datu formāta: gan SD-JWT VC, gan ISO mdoc atbalsta apgalvojumu apakškopas izpaušanu, tāpēc DCQL masīvs claims tiek piesaistīts šim atbalstam. DCQL darbotos arī ar formātu bez selektīvas izpaušanas, taču turētājam būtu jāizpauž visi akreditācijas dati pat vaicājumam ar vienu apgalvojumu.
Avoti
Šai lapai ir informatīvs raksturs, un tā nav juridiska konsultācija. Autoritatīvas vadlīnijas meklējiet tieši OpenID Foundation un Eiropas Komisijā.