Skip to content

baseid-oid4vci

The OID4VCI crate implements the OpenID for Verifiable Credential Issuance protocol, enabling wallets to obtain credentials from issuers over HTTPS.

[dependencies]
baseid-oid4vci = "0.1.0-alpha.1"
use baseid_oid4vci::metadata::IssuerMetadata;
let metadata = IssuerMetadata {
credential_issuer: "https://issuer.example.com".into(),
credential_endpoint: "https://issuer.example.com/credential".into(),
credentials_supported: vec![/* ... */],
// ...
};

The issuer creates a credential offer for the wallet:

use baseid_oid4vci::offer::CredentialOffer;
let offer = CredentialOffer {
credential_issuer: "https://issuer.example.com".into(),
credential_configuration_ids: vec!["UniversityDegree".into()],
grants: Some(grants),
};
let offer_uri = offer.to_uri()?;
// "openid-credential-offer://..."
use baseid_oid4vci::wallet::Oid4vciWallet;
// 1. Parse the offer
let offer = CredentialOffer::from_uri(&offer_uri)?;
// 2. Fetch issuer metadata
let metadata = Oid4vciWallet::fetch_metadata(&offer.credential_issuer).await?;
// 3. Obtain access token
let token = Oid4vciWallet::token_request(&metadata, &grant).await?;
// 4. Request the credential
let credential = Oid4vciWallet::credential_request(&metadata, &token, &proof).await?;
Grant TypeDescription
Pre-Authorized CodeIssuer provides a code out-of-band (e.g., QR code)
Authorization CodeStandard OAuth 2.0 authorization flow

Full API Reference