Aqbeż għall-kontenut ewlieni

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.

Offerta maħluqa
Kodiċi QR jew link jiftaħ il-kartiera
Offerta riċevuta
grant fdut
Token miksub
nonce u prova tal-pussess
Kredenzjal mitlub
kredenzjal maħluq
Kredenzjal maħruġ
il-kartiera tivvalida u taħżen
Kredenzjal aċċettat
Fejn jista' jfalli, fl-ordni li fiha jseħħu l-passi:
Il-kodiċi skada qabel ma ġie fdut
Talba għal token miċħuda
Talba għal kredenzjal miċħuda
Kredenzjal mhux maħżun

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' JWT
  • alg: l-algoritmu tal-iffirmar, wieħed minn dawk li l-emittent elenka fi proof_signing_alg_values_supported
  • jwk: 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ħor
  • iat: il-ħin li fih inħolqot il-prova, f'sekondi mill-1970
  • nonce: 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

  1. Emittent tal-Kredenzjal għal Kartiera: Credential Offer, murija bħala kodiċi QR
  2. Emittent tal-Kredenzjal għal Kartiera: tx_code, mibgħut fuq il-mowbajl tal-maniġer tal-flotta b'messaġġ SMS
  3. Kartiera għal Emittent tal-Kredenzjal: GET /.well-known/openid-credential-issuer
  4. Emittent tal-Kredenzjal għal Kartiera: metadata tal-emittent tal-kredenzjal
  5. Kartiera għal Server ta' Awtorizzazzjoni: GET /.well-known/oauth-authorization-server
  6. Server ta' Awtorizzazzjoni għal Kartiera: metadata tas-server ta' awtorizzazzjoni
  7. Kartiera għal Server ta' Awtorizzazzjoni: POST /token: pre-authorized_code, tx_code
  8. Server ta' Awtorizzazzjoni għal Kartiera: access_token
  9. Kartiera għal Emittent tal-Kredenzjal: POST /nonce
  10. Emittent tal-Kredenzjal għal Kartiera: c_nonce
  11. Kartiera: jiffirma proof JWT
  12. Kartiera għal Emittent tal-Kredenzjal: POST /credential: token ta' aċċess, provi
  13. Emittent tal-Kredenzjal għal Kartiera: credentials, notification_id
  14. Kartiera: jivvalida u jaħżen
  15. Kartiera għal Emittent tal-Kredenzjal: POST /notify: credential_accepted
  16. 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.

transaction_idstaqsi lid-deferred_credential_endpoint

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

credential_accepted

Maħżun fil-kartiera

credential_failure

Il-ħruġ falla għal xi raġuni oħra, per eżempju l-kredenzjal ma vvalidax

credential_deleted

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

  1. OpenID for Verifiable Credential Issuance 1.0
  2. OpenID4VC High Assurance Interoperability Profile 1.0
  3. EUDI Wallet Architecture and Reference Framework

Din il-paġna hija informattiva u ma tikkostitwixxix parir legali. Għal gwida awtorevoli ikkonsulta direttament mal-OpenID Foundation u l-Kummissjoni Ewropea.

Kellimna dwar l-integrazzjoni tal-EUDI Wallet