This is the second part of a two-part series. Part one, Decentralized Identity Systems Concepts, introduced the why and the what. This article explains the how.
Part one established the core idea: Instead of a central identity provider sitting in the middle of every trust relationship, users hold digitally signed credentials in a wallet, issuers sign those credentials, and verifiers check them – without needing to call the issuer every time.
This article builds on that foundation and explains the technical mechanisms that make it work. It covers decentralized identifiers, DID documents, trust systems, open standards, the issuance and verification flows, and how Microsoft Entra Verified ID implements all of this in practice. It also covers Face Check and the integration with Entra ID Governance Access Packages.
Every participant in a decentralized identity ecosystem – a person, an organization, a device – can be represented by a Decentralized Identifier, or DID.
A DID is a portable, globally unique URI that follows a three-part structure defined by the W3C DID specification:
did:method:specific-identifier
For example:
did:web:contoso.com
did:ion:EiAbc123...
The three parts are:
DIDs are important for two reasons.
Resolving a DID – looking it up, the same way you look up a domain name with DNS – returns a DID Document. This is a structured JSON file that contains the technical anchors needed to verify anything signed by that DID.
A DID Document deliberately contains no personal claims. Its contents are purely cryptographic and structural:
Here’s a simplified example of a DID Document:
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/suites/ed25519-2020/v1"
],
"id": "did:example:123456789abcdefghi",
"authentication": [{
"id": "did:example:123456789abcdefghi#keys-1",
"type": "Ed25519VerificationKey2020",
"controller": "did:example:123456789abcdefghi",
"publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
}]
}
The controller field names the entity that has the authority to update the document. The public key in the authentication section is what verifiers use to check that a credential or presentation was really signed by the claimed DID.

The DID Document sits at the root of all cryptographic trust. It contains no personal data – only the public keys and endpoints needed to verify signatures and locate services.
DID Documents need to be stored somewhere they can be retrieved reliably and with any tampering made evident. That storage infrastructure is called the Trust System, or more formally, the Verifiable Data Registry.
The Trust System plays a central role in decoupling the participants. Because issuers publish their DID Documents to the Trust System, verifiers can retrieve the issuer’s public key at any time without needing to contact the issuer directly. The same applies to the holder’s DID.
Today, Microsoft Entra Verified ID uses DID:Web as its trust system. It’s worth understanding how the platform got here, because the earlier design choice explains a lot about how the Trust System concept works in general.
DID:Web is a simple, permission-based method that ties a DID to an organization’s existing web domain. There is no blockchain involved.
How it works:
did.json file containing the organization’s public keys and service endpointshttps://[your-domain]/.well-known/did.jsonA DID:Web identity looks like this: did:web:contoso.com. The trust anchor is the organization’s existing DNS and web reputation – the same infrastructure that powers HTTPS certificates today.
DID:Web is cheaper and faster to set up than a blockchain-anchored method, and it produces a branded, human-readable DID. The trade-off is that it depends on the web domain remaining operational and under the organization’s control.
ION (Identity Overlay Network) is a public, permissionless DID network developed in partnership with the Decentralized Identity Foundation. It implements the Sidetree as a Layer 2 overlay on the Bitcoin blockchain, batching many identity operations into a single Bitcoin transaction and relying only on Bitcoin’s block ordering for consensus – no separate token or validator set is required.
ION is a useful illustration of what a maximally decentralized, permissionless Trust System looks like: Once a DID is anchored to Bitcoin, the record survives independently of any single company or service. Even if Microsoft’s services disappeared tomorrow, a did:ion record anchored to Bitcoin would remain resolvable.
That said, this is no longer how Microsoft Entra Verified ID actually works in production. Verified ID supported did:ion only as a preview option, and Microsoft ended that support in December 2023. Any tenant still running a did:ion authority needs to migrate to did:web, which requires reissuing all outstanding credentials under the new authority – there is no in-place conversion. New deployments are configured on did:web from the start.
| Characteristic | DID:ION (historical) | DID:Web (current) |
| Underlying infrastructure | Bitcoin blockchain (Layer 2) | Web domain (HTTPS + DNS) |
| Permissionless | Yes | No |
| Immutability | Very high (Bitcoin-anchored) | Domain-dependent |
| Status in Microsoft Entra Verified ID | Retired since December 2023 | Current, only supported method |
| DID readability | Long opaque string | Branded domain name |
The practical takeaway: If you’re planning a new Verified ID deployment, DID:Web is not “the practical default” among several options – it’s simply the trust system the platform uses. The interesting design question isn’t which method to pick, but whether the branded, domain-anchored trust model of DID:Web is an acceptable trade-off for your scenario, given that it ties your identity infrastructure to the continued availability of your domain.
One of the most important design decisions in decentralized identity is that it’s built on open, interoperable standards rather than proprietary protocols. This is what makes credentials portable across vendors.
The W3C Verifiable Credentials Data Model defines the structure of a verifiable credential: a set of claims about a subject, together with metadata and a cryptographic proof. Any issuer that follows this standard produces credentials that any compliant verifier can process.
A verifiable credential includes:
The OpenID for Verifiable Credential Issuance (OID4VCI) specification defines the API an issuer exposes so that a wallet can request and receive verifiable credentials. Access to this API is authorized using OAuth 2.0, which means existing authorization infrastructure can be reused.
The OpenID for Verifiable Presentations specification defines how a holder presents credentials to a verifier. The verifier issues an authorization request, the wallet assembles a Verifiable Presentation – a holder-signed package containing one or more credentials – and returns it. Access is again authorized through OAuth 2.0.
SIOPv2 extends OpenID Connect with the concept of a Self-Issued OpenID Provider: an OpenID Provider that is controlled by the user, not by a third-party service such as Google or Microsoft.
With SIOPv2, the wallet itself acts as the OpenID Provider. The user signs their own ID Token with a key they control. There is no central identity provider in the loop. Relying parties trust the self-issued token because it’s signed with a key they can verify against the holder’s DID Document.
SIOPv2 can be combined with OID4VP, which allows a trusting party to receive both an authenticated identity token and verified credential claims from a third-party issuer in a single flow.

In the SIOP v2 flow, the user’s wallet acts as the OpenID Provider. The relying party receives a self-signed ID token without involving any centralized identity provider.
Two data structures sit at the center of every decentralized identity interaction.
A Verifiable Credential (VC) is created and signed by an issuer. It contains claims about a subject and is tamper-evident: Any modification to the credential after signing will break the cryptographic proof.
A Verifiable Presentation (VP) is created and signed by the holder. It wraps one or more verifiable credentials and proves that the holder is the legitimate owner of the credentials they are presenting.
The dual-signature structure is deliberate:
A verifier checks both: First that the VC was issued by a trusted party (by resolving the issuer’s DID and verifying the signature against the issuer’s public key), then that the VP was constructed by the legitimate holder (by resolving the holder’s DID and verifying the holder’s signature).
This two-layer check is what makes decentralized credentials resistant to forgery and theft.
The diagram below illustrates how a verifiable credential flows from issuer to holder:

The steps are:
At no point does the issuer need to retain a copy of the issued credential. The signed credential belongs to the holder.
When the holder needs to prove something to a verifier, the flow works in the opposite direction.

did:web) to retrieve the issuer’s DID Document and extract the public key.The verifier never needs to contact the issuer directly. Everything is resolved through the Trust System.
Microsoft Entra Verified ID is Microsoft’s managed service for implementing the issuer and verifier roles in this ecosystem. It abstracts much of the cryptographic and infrastructure complexity, exposing a REST API that developers use to request credential issuance and verification.

All private keys used to sign verifiable credentials are generated and stored in Azure Key Vault. The keys never leave the vault; signing operations are performed inside it. This gives organizations cryptographic proof of their identity without exposing private key material to their own application code.
Microsoft Authenticator is the wallet app for Microsoft Entra Verified ID. It handles:
While other wallet SDKs exist for custom implementations, Microsoft Authenticator is required for the most advanced features of the platform.
When an organization sets up Microsoft Entra Verified ID, there are two configuration paths:
Quick Setup – Microsoft hosts the did.json file and manages the Key Vault configuration. This is the fastest way to start, but it produces a DID that contains the Entra tenant ID rather than a recognizable domain name (for example, did:web:verifiedid.entra.microsoft.com/tenantid/…). This is fine for testing and development but less suitable for production deployments where brand trust matters.
Advanced Setup – The organization hosts its own did.json file at https://[your-domain]/.well-known/did.json and configures its own Key Vault. This produces a branded DID such as did:web:contoso.com. The Microsoft Authenticator app displays a Verified badge next to the issuer’s name when the DID resolves to a known domain, which builds holder confidence.
Both paths configure a did:web authority – the choice here is about branding and operational control, not about which trust system underpins the identifier.

Presenting a credential proves that someone has access to the wallet. It does not by itself prove that the person holding the phone is the same person the credential was issued to. That gap is closed by Face Check.
Face Check is an advanced feature of Microsoft Entra Verified ID, powered by Azure AI Vision. When a verifier requests a Face Check:
The confidence score thresholds are statistically significant:
This makes Face Check suitable for the highest-assurance scenarios: privileged access grants, help desk account recovery, and remote onboarding checks where the risk of social engineering or impersonation is highest.
A well-known example of where Face Check would have helped: The September 2023 breach at MGM Resorts, in which attackers used a short social-engineering phone call to persuade the IT help desk to reset a privileged account’s credentials, ultimately compromising the company’s identity infrastructure. A Face Check requirement tied to a verifiable credential would have required the caller to produce both the credential and a live biometric match before any reset could proceed.
Microsoft Entra Verified ID integrates with Entra ID Governance through Access Packages.
An Access Package is a bundle of IT resources – applications, group memberships, SharePoint sites, Microsoft Teams – that an employee needs to perform a role. Entitlement Management automates how users request, approve, and lose access to these bundles over time.
The integration with Verified ID allows an organization to add a credential presentation requirement to an Access Package policy. Before access is granted, the user must:
This combination – credential presentation plus live biometric match – provides a much stronger assurance than password-based access alone. It ensures that the person requesting privileged access is the same person whose identity was verified at onboarding, and that they are physically present with their wallet.
To make the technical pieces concrete, here is how they combine in a realistic enterprise scenario.
Situation: Woodgrove Inc. wants to allow its employees to prove their employment status to a partner company, Proseware, without setting up a federation link between the two Entra tenants.
| Step | Actor | Action |
| 1 | Woodgrove HR | Sets up Microsoft Entra Verified ID with Advanced Setup (DID:Web on did:web:woodgrove.com) |
| 2 | Woodgrove IT | Creates a credential definition for “Verified Employee” with claims: employee ID, department, and employment status |
| 3 | Employee | Opens Microsoft Authenticator, scans the issuance QR code on the Woodgrove employee portal, signs in with Entra ID credentials |
| 4 | Woodgrove Entra | Authenticates the employee, retrieves HR claims, and signs the “Verified Employee” VC with the Key Vault key |
| 5 | Authenticator | Stores the signed VC in the employee’s wallet |
| 6 | Proseware | Configures a verification request for “Verified Employee” issued by did:web:woodgrove.com |
| 7 | Employee | Visits the Proseware portal, scans the verification QR code, reviews the request in Authenticator, and consents |
| 8 | Authenticator | Assembles a VP signed with the employee’s private key and sends it to the Proseware verifier service |
| 9 | Proseware | Resolves did:web:woodgrove.com, retrieves Woodgrove’s public key, and verifies both the VC and VP signatures |
| 10 | Proseware | Grants the employee access to the partner portal |
No federation link. No guest account. No phone call to Woodgrove. Woodgrove’s signature on the credential is all the trust Proseware needs.
Microsoft Entra Verified ID follows a tiered consumption model rather than a single flat license:
Because pricing and packaging change periodically, always confirm current figures against the Microsoft Entra Verified ID pricing page before budgeting a deployment.
The Microsoft Entra Verified ID documentation is the authoritative starting point for implementation. Key sections include:
For the underlying standards:
Decentralized identity is not a single technology – it’s a layered stack of open standards, cryptographic primitives, and distributed infrastructure. Understanding each layer helps explain why the system can work without a central authority.
did:web in Microsoft Entra Verified ID today) makes DID Documents available to any party without central coordinationThe architecture is designed so that trust is rooted in mathematics and open standards, not in the continued availability of any single service or vendor. That’s what makes it genuinely different from federation or centralized identity, and what makes it the right foundation for the next generation of digital trust.
Did you learn from this article? Perhaps you’re already familiar with some of the techniques above? If you find cybersecurity issues interesting, maybe you could start in a cybersecurity or similar position here at Würth IT Italy.