Il-ħruġ ta' kredenzjali OpenID4VCI spjegat: mill-offerta sal-kredenzjal aċċettat
OpenID4VCI, OpenID for Verifiable Credential Issuance, jiddefinixxi kif kartiera titlob u tirċievi kredenzjal minn emittent. Ħruġ wieħed jgħaddi minn diversi passi distinti qabel ma l-kartiera verament ikollha kredenzjal utli, u kull wieħed għandu l-mod ta' falliment tiegħu. Din il-paġna tgħaddi minn dan iċ-ċiklu tal-ħajja kollu, b'eżempji maħduma oriġinali.
Żewġ modi kif tibda: kodiċi awtorizzat minn qabel u kodiċi ta' awtorizzazzjoni
Il-ħruġ spiss jibda minn Credential Offer mibgħuta mill-emittent, u l-grant li ssemmi jiddeċiedi kif il-kartiera tinkiseb awtorizzata. Kartiera tista' wkoll tibda l-ħruġ hi stess, mingħajr ebda offerta, bl-użu tal-fluss tal-kodiċi ta' awtorizzazzjoni. Iż-żewġ fluwissi jispiċċaw fl-istess post: il-kartiera jkollha token ta' aċċess li tista' tuża biex titlob il-kredenzjal.
Fluss ta' kodiċi awtorizzat minn qabel
1. Emittent
Diġà jaf lid-detentur, joħroġ Credential Offer b'pre-authorized_code
2. Kartiera
Jifdi l-kodiċi fit-token endpoint, b'mod fakultattiv flimkien ma' kodiċi tat-tranżazzjoni
3. Kartiera
Jitlob il-kredenzjal b'prova tal-pussess taċ-ċavetta tiegħu
Fluss ta' kodiċi ta' awtorizzazzjoni
1. Kartiera
Jiskennja Credential Offer li ssemmi grant authorization_code, jew jibda l-fluss hu stess mingħajr offerta
2. Server ta' Awtorizzazzjoni
Iwassal lid-detentur permezz ta' login u kunsens, imbagħad joħroġ kodiċi
3. Kartiera
Jiskambja l-kodiċi ma' token, imbagħad jitlob il-kredenzjal
Iċ-ċiklu tal-ħajja sħiħ ta' offerta ta' kredenzjal
L-ispeċifikazzjoni ma tiddefinixxix stati bl-isem, imma fluss inizjat mill-emittent fejn il-kredenzjal jinħareġ minnufih huwa l-eħfef li ssegwi bħala s-sekwenza hawn taħt. Kull pass jista' jfalli bil-mod tiegħu, u implimentazzjoni ta' kartiera trid tittratta dawk it-toroq, mhux biss dik ta' suċċess.
Eżempju maħdum: ċertifikat tal-ħila fit-triq għal flotta tat-trasport
Korp tal-ispezzjoni tal-vetturi joħroġ ċertifikat tal-ħila fit-triq lill-kartiera tan-negozju ta' kumpanija tat-trasport wara spezzjoni ta' rutina. L-ispettur diġà kien awtentika lill-maniġer tal-flotta fil-punt tal-ispezzjoni, allura l-emittent juża l-fluss tal-kodiċi awtorizzat minn qabel. Il-passi hawn taħt isegwu dak il-ħruġ wieħed mill-offerta sal-kredenzjal aċċettat.
L-eżempju juri l-OpenID4VCI bażiku. Implimentazzjonijiet ta' fiduċja għolja bħall-EUDI Wallet isegwu l-profil HAIP fuqu, li jżid tokens ta' aċċess marbuta ma' DPoP, attestazzjoni tal-kartiera fit-token endpoint u attestazzjoni taċ-ċavetta għaċ-ċwievet tal-kredenzjal. Dawk tħallew barra hawn biex kull pass jibqa' faċli biex jinqara.
1. Offerta ta' kredenzjal
It-terminal tal-korp tal-ispezzjoni juri kodiċi QR. Fih URI li tibda b'openid-credential-offer:// li ġġorr l-offerta hawn taħt, ikkowdjata bl-URL f'parametru credential_offer, jew credential_offer_uri li minnha l-kartiera tiġborha. Il-kartiera tiskennjaha u taqra liema kredenzjal qed jiġi offrut u kif tinġabar.
Emittent
Turi kodiċi QR b'Credential Offer
Issemmi l-konfigurazzjoni tal-kredenzjal u grant pre-authorized_code
{
"credential_issuer": "https://issuer.fleetinspect.example",
"credential_configuration_ids": ["roadworthiness_certificate"],
"grants": {
"urn:ietf:params:oauth:grant-type:pre-authorized_code": {
"pre-authorized_code": "fi-8f2c0b3a",
"tx_code": {
"length": 6,
"input_mode": "numeric",
"description": "Enter the code sent to your phone by text message"
}
}
}
}2. Skoperta tal-metadata tal-emittent
Qabel ma titlob xi ħaġa, il-kartiera tiġbed il-metadata tal-emittent biex tiskopri x'fih roadworthiness_certificate u liema endpoints għandha ssejjaħ. Il-metadata ma telenka ebda server ta' awtorizzazzjoni separat, allura l-emittent huwa s-server ta' awtorizzazzjoni tiegħu stess, u l-kartiera taqra t-token endpoint mill-metadata ta' dak is-server.
Kartiera
GET /.well-known/openid-credential-issuer
Titgħallem il-format tal-kredenzjal, il-pretensjonijiet u t-tipi ta' prova aċċettati, flimkien man-nonce, credential, deferred u notification endpoints
Metadata tal-emittent tal-kredenzjal (estratt)
{
"credential_issuer": "https://issuer.fleetinspect.example",
"nonce_endpoint": "https://issuer.fleetinspect.example/nonce",
"credential_endpoint": "https://issuer.fleetinspect.example/credential",
"deferred_credential_endpoint": "https://issuer.fleetinspect.example/deferred",
"notification_endpoint": "https://issuer.fleetinspect.example/notify",
"credential_configurations_supported": {
"roadworthiness_certificate": {
"format": "dc+sd-jwt",
"vct": "https://fleetinspect.example/vct/roadworthiness",
"cryptographic_binding_methods_supported": ["jwk"],
"credential_signing_alg_values_supported": ["ES256"],
"proof_types_supported": {
"jwt": { "proof_signing_alg_values_supported": ["ES256"] }
},
"credential_metadata": {
"claims": [
{ "path": ["vehicle_registration"] },
{ "path": ["inspection_result"] },
{ "path": ["valid_until"] }
]
}
}
}
}Metadata tas-server ta' awtorizzazzjoni (estratt), minn /.well-known/oauth-authorization-server
{
"issuer": "https://issuer.fleetinspect.example",
"token_endpoint": "https://issuer.fleetinspect.example/token",
"pre-authorized_grant_anonymous_access_supported": true
}3. Talba għal token
Il-kartiera tifdi l-kodiċi awtorizzat minn qabel fit-token endpoint, flimkien mal-kodiċi tat-tranżazzjoni li l-korp tal-ispezzjoni bagħat lill-mowbajl tal-maniġer tal-flotta. Il-fatt li dak il-kodiċi jintbagħat fuq tieni kanal ifisser li min jieħu ritratt tal-kodiċi QR minn fuq spallejh xorta ma jistax jifdih.
Kartiera
POST /token
Tibgħat il-pre-authorized_code u t-tx_code, tirċievi token ta' aċċess marbut ma' din l-offerta
POST /token HTTP/1.1 Host: issuer.fleetinspect.example Content-Type: application/x-www-form-urlencoded grant_type=urn:ietf:params:oauth:grant-type:pre-authorized_code &pre-authorized_code=fi-8f2c0b3a &tx_code=482913
Tweġiba
{
"access_token": "fi-at-3d91e0",
"token_type": "Bearer",
"expires_in": 86400
}4. Prova tal-pussess
Peress li l-metadata telenka nonce_endpoint, il-kartiera l-ewwel tiġbed c_nonce fresk minn hemm. Imbagħad tipprova li għandha ċ-ċavetta privata li magħha se jkun marbut il-kredenzjal, billi tiffirma proof JWT fuq l-identifikatur tal-emittent u dak iċ-c_nonce.
Kartiera
POST /nonce, imbagħad tiffirma proof JWT biċ-ċavetta li magħha se jkun marbut il-kredenzjal
Torbot il-kredenzjal ma' dik iċ-ċavetta, mhux sempliċiment ma' min għandu t-token ta' aċċess
POST /nonce HTTP/1.1 Host: issuer.fleetinspect.example
Tweġiba
{
"c_nonce": "fi-nonce-77aa"
}Il-kartiera issa tibni l-proof JWT minn żewġ oġġetti JSON, header u payload, u tiffirmahom biċ-ċavetta privata li magħha se jkun marbut il-kredenzjal.
Header: x'inhu dan il-JWT u liema ċavetta ffirmatu
{
"typ": "openid4vci-proof+jwt",
"alg": "ES256",
"jwk": { "kty": "EC", "crv": "P-256", "x": "...", "y": "..." }
}typ: timmarka dan bħala OpenID4VCI key proof, biex ma jkunx jista' jiġi maħsub bħala xi tip ieħor ta' JWTalg: l-algoritmu tal-iffirmar, wieħed minn dawk li l-emittent elenka fi proof_signing_alg_values_supportedjwk: iċ-ċavetta pubblika li magħha se jkun marbut il-kredenzjal; l-emittent jivverifika l-firma kontriha
Payload: għal min hija l-prova u meta saret
{
"aud": "https://issuer.fleetinspect.example",
"iat": 1789376400,
"nonce": "fi-nonce-77aa"
}aud: l-identifikatur tal-emittent, biex il-prova ma tistax terġa' tintuża ma' emittent ieħoriat: il-ħin li fih inħolqot il-prova, f'sekondi mill-1970nonce: iċ-c_nonce min-nonce endpoint, li juri li l-prova hija friska
Riżultat iffirmat
Il-header u l-payload huma kull wieħed ikkowdjati b'base64url u magħquda b'punt. Il-kartiera tiffirma dik il-frażi biċ-ċavetta privata tagħha u żżid il-firma kkowdjata b'base64url wara tieni punt. Il-frażi li tirriżulta hija l-proof JWT li l-kartiera tibgħat fit-talba tal-kredenzjal fil-pass 5.
base64url(header) . base64url(payload) . base64url(signature) eyJ0eXAiOiJvcGVuaWQ0dmNpLXByb29mK2p3dCIs... .eyJhdWQiOiJodHRwczovL2lzc3Vlci5mbGVldGluc3BlY3QuZXhhbXBsZSIs... .<ES256 signature>
5. Talba għal kredenzjal
Il-kartiera ssejjaħ il-credential endpoint bit-token ta' aċċess u l-prova, u l-emittent joħloq u jirritorna l-kredenzjal iffirmat.
Kartiera
POST /credential
Tibgħat it-token ta' aċċess, l-id tal-konfigurazzjoni u l-proof JWT, tirċievi l-kredenzjal iffirmat u notification_id
POST /credential HTTP/1.1
Host: issuer.fleetinspect.example
Content-Type: application/json
Authorization: Bearer fi-at-3d91e0
{
"credential_configuration_id": "roadworthiness_certificate",
"proofs": {
"jwt": ["<proof JWT from step 4>"]
}
}Tweġiba
{
"credentials": [
{ "credential": "<issuer-signed SD-JWT VC>" }
],
"notification_id": "fi-notif-9012"
}Il-fluss kollu f'daqqa waħda
Din id-dijagramma ta' sekwenza tqiegħed flimkien il-ħames passi tal-eżempju maħdum, mill-offerta san-notifika. Il-vleġeġ solidi huma talbiet, il-vleġeġ intermittenti huma tweġibiet, u l-vleġġa bit-tikek hija l-kodiċi tat-tranżazzjoni li jivvjaġġa barra mill-protokoll b'messaġġ SMS.
Kartiera
Il-kartiera tan-negozju tal-kumpanija tat-trasport
Server ta' Awtorizzazzjoni
Imħaddem mill-emittent stess f'dan l-eżempju
Emittent tal-Kredenzjal
Korp tal-ispezzjoni tal-vetturi
- Emittent tal-Kredenzjal għal Kartiera: Credential Offer, murija bħala kodiċi QR
- Emittent tal-Kredenzjal għal Kartiera: tx_code, mibgħut fuq il-mowbajl tal-maniġer tal-flotta b'messaġġ SMS
- Kartiera għal Emittent tal-Kredenzjal: GET /.well-known/openid-credential-issuer
- Emittent tal-Kredenzjal għal Kartiera: metadata tal-emittent tal-kredenzjal
- Kartiera għal Server ta' Awtorizzazzjoni: GET /.well-known/oauth-authorization-server
- Server ta' Awtorizzazzjoni għal Kartiera: metadata tas-server ta' awtorizzazzjoni
- Kartiera għal Server ta' Awtorizzazzjoni: POST /token: pre-authorized_code, tx_code
- Server ta' Awtorizzazzjoni għal Kartiera: access_token
- Kartiera għal Emittent tal-Kredenzjal: POST /nonce
- Emittent tal-Kredenzjal għal Kartiera: c_nonce
- Kartiera: jiffirma proof JWT
- Kartiera għal Emittent tal-Kredenzjal: POST /credential: token ta' aċċess, provi
- Emittent tal-Kredenzjal għal Kartiera: credentials, notification_id
- Kartiera: jivvalida u jaħżen
- Kartiera għal Emittent tal-Kredenzjal: POST /notify: credential_accepted
- Emittent tal-Kredenzjal għal Kartiera: 204 No Content
Meta l-kredenzjal għadu mhux lest: ħruġ differit
L-eżempju t'hawn fuq jassumi li r-riżultat tal-ispezzjoni huwa diġà finali. Jekk minflok il-korp tal-ispezzjoni jkollu bżonn jgħolli riżultat konfini lil spettur aktar anzjan, il-credential endpoint ma jistax jirritorna l-kredenzjal minnufih, allura jiddifferixxi l-ħruġ.
Ħruġ immedjat
Il-credential endpoint jirritorna l-kredenzjal iffirmat fl-istess tweġiba tat-talba.
Ħruġ differit
Il-credential endpoint iwieġeb b'HTTP 202, transaction_id u intervall minflok. Il-kartiera tistaqsi lid-deferred credential endpoint b'dak l-id, filwaqt li tistenna mill-inqas interval sekondi bejn it-talbiet, sakemm il-kredenzjal ikun lest.
Tweġiba differita minn /credential
HTTP/1.1 202 Accepted
Content-Type: application/json
{
"transaction_id": "fi-tx-55c2",
"interval": 900
}Staqsi lil /deferred sakemm ikun lest
POST /deferred HTTP/1.1
Host: issuer.fleetinspect.example
Content-Type: application/json
Authorization: Bearer fi-at-3d91e0
{ "transaction_id": "fi-tx-55c2" }
// While the review is open: 202 with the same transaction_id and interval.
// Once approved: 200 with the credentials, optionally with a notification_id.
// If the review rejects the result: a credential_request_denied error.Ngħalqu ċ-ċiklu: in-notification endpoint
Wara l-ħruġ, il-kartiera tista' tgħid lill-emittent x'ġara bil-kredenzjal, bl-użu tan-notification_id mit-tweġiba tal-kredenzjal. Il-kartieri mhumiex meħtieġa jibagħtu dawn in-notifiki u l-kunsinna mhix garantita, allura emittent ma jistax jittratta notifika nieqsa bħala li tfisser xi ħaġa.
Kartiera
Tibgħat avveniment lin-notification_endpoint tal-emittent għan-notification_id li rċeviet, li tkopri kull kredenzjal f'dik it-tweġiba
Maħżun fil-kartiera
Il-ħruġ falla għal xi raġuni oħra, per eżempju l-kredenzjal ma vvalidax
Il-ħruġ falla minħabba d-detentur, per eżempju rrifjuta li jaħżnu
POST /notify HTTP/1.1
Host: issuer.fleetinspect.example
Content-Type: application/json
Authorization: Bearer fi-at-3d91e0
{
"notification_id": "fi-notif-9012",
"event": "credential_accepted"
}Termini relatati
Mistoqsijiet frekwenti
Kif taf il-kartiera liema tip ta' grant għandha tuża?
Il-Credential Offer issemmi l-grant fl-oġġett grants tagħha. authorization_code jkun preżenti meta l-emittent irid li d-detentur jagħmel login bħala parti mill-fluss. pre-authorized_code jkun preżenti meta d-detentur ikun diġà ġie awtentikat fuq il-kanal fejn inħolqot l-offerta, pereżempju mill-ispettur fil-punt tal-ispezzjoni fl-eżempju maħdum hawn taħt. Offerta tista' ssemmi t-tnejn, u mbagħad il-kartiera tagħżel waħda. Jekk l-offerta ma jkollha ebda oġġett grants, il-kartiera tfittex liema tipi ta' grant jappoġġja s-server ta' awtorizzazzjoni fil-metadata tiegħu.
Għaliex il-kartiera tiġbed il-metadata tal-emittent qabel ma titlob xi ħaġa?
Il-Credential Offer issemmi biss il-credential_configuration_ids, l-URL tal-emittent u l-grants. Il-metadata tal-emittent, mogħtija minn well-known path, hija dik li tiddeskrivi kull konfigurazzjoni: il-format tagħha, il-pretensjonijiet (claims) tagħha u t-tipi ta' prova li taċċetta, flimkien man-nonce, credential, deferred u notification endpoints. Din tgħid ukoll liema server ta' awtorizzazzjoni għandu jintuża, u l-metadata ta' dak is-server tagħti t-token endpoint. Mingħajr it-tnejn, il-kartiera ma tkunx taf kif tibni talbiet validi jew x'turi lid-detentur qabel ma jagħti l-kunsens.
X'jipprova verament il-prova tal-pussess?
Tipprova li l-kartiera li qed titlob il-kredenzjal għandha ċ-ċavetta privata li magħha jkun marbut il-kredenzjal, mhux biss li għandha token ta' aċċess validu. Il-kartiera tiffirma proof JWT fuq l-identifikatur tal-emittent u c_nonce fresk mid-nonce endpoint tal-emittent, bl-użu ta' dik iċ-ċavetta. L-emittent iwaħħal iċ-ċavetta pubblika korrispondenti fil-kredenzjal. Verifikatur li jeħtieġ ir-rabta taċ-ċavetta jitlob lid-detentur jerġa' jiffirma bl-istess ċavetta meta jippreżenta, allura kredenzjal ikkupjat mingħajr iċ-ċavetta jonqos minn dik il-verifika.
Għaliex emittent jiddifferixxi l-ħruġ minflok jirritorna l-kredenzjal minnufih?
Xi verifiki li l-emittent jagħmel qabel ma joħloq kredenzjal ma jistgħux jitlestew fi ħdan talba HTTP waħda, pereżempju reviżjoni manwali jew sejħa lil reġistru estern bil-mod. Il-ħruġ differit iħalli lill-credential endpoint iwieġeb minnufih b'transaction_id minflok jimblokka l-konnessjoni, u l-kartiera tistaqsi lid-deferred endpoint b'dak l-id sakemm il-verifika tispiċċa u l-kredenzjal ikun lest biex jinġabar.
In-notification endpoint huwa obbligatorju li l-emittent jimplimentah?
Le. Huwa fakultattiv għall-emittenti, u lanqas il-kartieri mhuma meħtieġa jużawh. Meta t-tnejn jappoġġjawh, l-emittent isir jaf x'ġara wara l-ħruġ: il-kredenzjali ġew maħżuna (credential_accepted), id-detentur waqqaf il-ħruġ, pereżempju billi rrifjuta li jaħżinhom (credential_deleted), jew falla għal raġuni oħra (credential_failure). Il-kunsinna mhix garantita, allura emittent għandu jittratta notifika bħala informazzjoni utli, qatt bħala rekord affidabbli, u ma jista' jassumi xejn minn waħda nieqsa.
Sorsi
Din il-paġna hija informattiva u ma tikkostitwixxix parir legali. Għal gwida awtorevoli ikkonsulta direttament mal-OpenID Foundation u l-Kummissjoni Ewropea.