Skip to content

Comments

Improve OpenID4VCI interoperability for mixed server behavior#1542

Open
soulkeykim wants to merge 2 commits intoopenwallet-foundation:mainfrom
soulkeykim:openid4vci-interop-fixes
Open

Improve OpenID4VCI interoperability for mixed server behavior#1542
soulkeykim wants to merge 2 commits intoopenwallet-foundation:mainfrom
soulkeykim:openid4vci-interop-fixes

Conversation

@soulkeykim
Copy link

Summary

This PR improves OpenID4VCI interoperability for issuer/authorization-server implementations that vary in metadata and endpoint behavior.

It is scoped to three files in org.multipaz.provisioning.openid4vci and avoids unrelated cleanup.

Fixes #1541

What changed

  • AuthorizationConfiguration

    • Treat token_endpoint_auth_methods_supported: ["public"] as no client authentication.
    • Add metadata-derived supportsDPoP capability flag.
    • Avoid selecting a DPoP algorithm when DPoP is not advertised.
  • OpenID4VCIProvisioningClient

    • Make DPoP usage conditional on supportsDPoP.
    • For nonce retrieval, use fallback auth attempts (DPoP -> Bearer -> none) and retry GET when POST returns HTML.
    • Accept both 200 OK and 201 Created as successful PAR responses.
    • Reuse c_nonce from token responses when present.
  • CredentialOffer

    • Tolerate additional credential_offer forms:
      • openid-credential-offer: and haip-vci: scheme normalization.
      • plain https://... treated as credential_offer_uri.
      • object and stringified-object JSON payloads.

Why

Several real OpenID4VCI deployments are standards-adjacent but not fully uniform.
These changes keep standards-compliant behavior intact while increasing resilience to common metadata/response variations.

Testing

  • ./gradlew :multipaz:compileKotlinJvm :multipaz:jvmTest --tests "org.multipaz.provisioning.openid4vci.OpenIDBackendUtilTest" --no-daemon

Handle token auth metadata that advertises public clients, make DPoP optional based on server capability, accept PAR success on 200/201, reuse c_nonce from token responses, and make credential_offer parsing tolerant of URI-scheme and HTTPS forms.

Test: ./gradlew :multipaz:compileKotlinJvm :multipaz:jvmTest --tests "org.multipaz.provisioning.openid4vci.OpenIDBackendUtilTest" --no-daemon
Signed-off-by: Soulkey Kim <soulkey.kim@sita.aero>
@soulkeykim soulkeykim force-pushed the openid4vci-interop-fixes branch from b7d11d8 to 1b10e14 Compare February 16, 2026 09:00
Signed-off-by: Soulkey Kim <soulkey.kim@sita.aero>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

OpenID4VCI interop fixes: public auth method, optional DPoP fallback, and tolerant credential_offer parsing

1 participant