From 6df42f0a07e238ad86b8e999165b4ac3e77fab8b Mon Sep 17 00:00:00 2001 From: Bibash Shrestha Date: Thu, 14 Mar 2024 14:29:31 +0545 Subject: [PATCH] Url encode client metadata for /par post call --- lib/oidc4vc/get_authorization_uri_for_issuer.dart | 1 + packages/oidc4vc/lib/src/oidc4vc.dart | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/oidc4vc/get_authorization_uri_for_issuer.dart b/lib/oidc4vc/get_authorization_uri_for_issuer.dart index 592f1c7fe..18ae3ad4e 100644 --- a/lib/oidc4vc/get_authorization_uri_for_issuer.dart +++ b/lib/oidc4vc/get_authorization_uri_for_issuer.dart @@ -84,6 +84,7 @@ Future getAuthorizationUriForIssuer({ oidc4vciDraftType: oidc4vciDraftType, vcFormatType: vcFormatType, clientAssertion: clientAssertion, + secureAuthorizedFlow: secureAuthorizedFlow, ); if (secureAuthorizedFlow) { diff --git a/packages/oidc4vc/lib/src/oidc4vc.dart b/packages/oidc4vc/lib/src/oidc4vc.dart index 4ca746975..109ec2a6c 100644 --- a/packages/oidc4vc/lib/src/oidc4vc.dart +++ b/packages/oidc4vc/lib/src/oidc4vc.dart @@ -143,6 +143,7 @@ class OIDC4VC { required OIDC4VCIDraftType oidc4vciDraftType, required VCFormatType vcFormatType, required String? clientAssertion, + required bool secureAuthorizedFlow, }) async { try { final openIdConfiguration = await getOpenIdConfig( @@ -174,6 +175,7 @@ class OIDC4VC { oidc4vciDraftType: oidc4vciDraftType, vcFormatType: vcFormatType, clientAssertion: clientAssertion, + secureAuthorizedFlow: secureAuthorizedFlow, ); return (authorizationEndpoint, authorizationRequestParemeters); @@ -200,6 +202,7 @@ class OIDC4VC { required OIDC4VCIDraftType oidc4vciDraftType, required VCFormatType vcFormatType, required String? clientAssertion, + required bool secureAuthorizedFlow, }) { //https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html#name-successful-authorization-re @@ -317,9 +320,14 @@ class OIDC4VC { 'nonce': nonce, 'code_challenge': codeChallenge, 'code_challenge_method': 'S256', - 'client_metadata': jsonEncode(clientMetaData), }; + if (secureAuthorizedFlow) { + myRequest['client_metadata'] = + Uri.encodeComponent(jsonEncode(clientMetaData)); + } else { + myRequest['client_metadata'] = jsonEncode(clientMetaData); + } switch (clientAuthentication) { case ClientAuthentication.none: break;