@@ -71,9 +71,9 @@ class OpenId4VciClient(
7171 * the key behind [signClientAttestationPop], see
7272 * [OAuth 2.0 Attestation-Based Client Authentication](https://www.ietf.org/archive/id/draft-ietf-oauth-attestation-based-client-auth-04.html)
7373 */
74- private val loadClientAttestationJwt : suspend () -> String ,
74+ private val loadClientAttestationJwt : ( suspend () -> String ) ? = null ,
7575 /* * Used for authenticating the client at the authorization server with client attestation. */
76- private val signClientAttestationPop : SignJwtFun <JsonWebToken > = SignJwt (
76+ private val signClientAttestationPop : SignJwtFun <JsonWebToken >? = SignJwt (
7777 EphemeralKeyWithoutCert (),
7878 JwsHeaderNone ()
7979 ),
@@ -280,16 +280,17 @@ class OpenId4VciClient(
280280 Napier .i(" postToken: $tokenEndpointUrl with $tokenRequest " )
281281
282282 val clientAttestationJwt = if (oauthMetadata.useClientAuth()) {
283- loadClientAttestationJwt.invoke()
284- } else null
285- val clientAttestationPoPJwt = if (oauthMetadata.useClientAuth()) {
286- BuildClientAttestationPoPJwt (
287- signClientAttestationPop,
288- clientId = oid4vciService.clientId,
289- audience = issuerMetadata.credentialIssuer,
290- lifetime = 10 .minutes,
291- ).serialize()
283+ loadClientAttestationJwt?.invoke()
292284 } else null
285+ val clientAttestationPoPJwt =
286+ if (oauthMetadata.useClientAuth() && signClientAttestationPop != null && clientAttestationJwt != null ) {
287+ BuildClientAttestationPoPJwt (
288+ signClientAttestationPop,
289+ clientId = oid4vciService.clientId,
290+ audience = issuerMetadata.credentialIssuer,
291+ lifetime = 10 .minutes,
292+ ).serialize()
293+ } else null
293294 val dpopHeader = if (oauthMetadata.hasMatchingDpopAlgorithm()) {
294295 BuildDPoPHeader (signDpop, url = tokenEndpointUrl)
295296 } else null
@@ -535,16 +536,17 @@ class OpenId4VciClient(
535536 ): AuthenticationRequestParameters {
536537 val shouldIncludeClientAttestation = tokenAuthMethods?.contains(AUTH_METHOD_ATTEST_JWT_CLIENT_AUTH ) == true
537538 val clientAttestationJwt = if (shouldIncludeClientAttestation) {
538- loadClientAttestationJwt.invoke()
539- } else null
540- val clientAttestationPoPJwt = if (shouldIncludeClientAttestation) {
541- BuildClientAttestationPoPJwt (
542- signClientAttestationPop,
543- clientId = oid4vciService.clientId,
544- audience = credentialIssuer,
545- lifetime = 10 .minutes,
546- ).serialize()
539+ loadClientAttestationJwt?.invoke()
547540 } else null
541+ val clientAttestationPoPJwt =
542+ if (shouldIncludeClientAttestation && signClientAttestationPop != null && clientAttestationJwt != null ) {
543+ BuildClientAttestationPoPJwt (
544+ signClientAttestationPop,
545+ clientId = oid4vciService.clientId,
546+ audience = credentialIssuer,
547+ lifetime = 10 .minutes,
548+ ).serialize()
549+ } else null
548550 val response = client.submitForm(
549551 url = url,
550552 formParameters = parameters {
0 commit comments