diff --git a/src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/ClientAttestationPopDetails.cs b/src/WalletFramework.Oid4Vc/ClientAttestation/ClientAttestationPopDetails.cs
similarity index 93%
rename from src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/ClientAttestationPopDetails.cs
rename to src/WalletFramework.Oid4Vc/ClientAttestation/ClientAttestationPopDetails.cs
index fe5c859..d62c65c 100644
--- a/src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/ClientAttestationPopDetails.cs
+++ b/src/WalletFramework.Oid4Vc/ClientAttestation/ClientAttestationPopDetails.cs
@@ -1,7 +1,7 @@
using LanguageExt;
using static System.String;
-namespace WalletFramework.Oid4Vc.Oid4Vci.AuthFlow.Models;
+namespace WalletFramework.Oid4Vc.ClientAttestation;
public record ClientAttestationPopDetails
{
diff --git a/src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/CombinedWalletAttestation.cs b/src/WalletFramework.Oid4Vc/ClientAttestation/CombinedWalletAttestation.cs
similarity index 91%
rename from src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/CombinedWalletAttestation.cs
rename to src/WalletFramework.Oid4Vc/ClientAttestation/CombinedWalletAttestation.cs
index 80b2d39..fcc6f49 100644
--- a/src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/CombinedWalletAttestation.cs
+++ b/src/WalletFramework.Oid4Vc/ClientAttestation/CombinedWalletAttestation.cs
@@ -1,4 +1,6 @@
-namespace WalletFramework.Oid4Vc.Oid4Vci.AuthFlow.Models;
+using WalletFramework.Oid4Vc.Oid4Vci.AuthFlow.Models;
+
+namespace WalletFramework.Oid4Vc.ClientAttestation;
public record CombinedWalletAttestation
{
diff --git a/src/WalletFramework.Oid4Vc/ClientAttestation/HttpClientExtensions.cs b/src/WalletFramework.Oid4Vc/ClientAttestation/HttpClientExtensions.cs
new file mode 100644
index 0000000..61f7394
--- /dev/null
+++ b/src/WalletFramework.Oid4Vc/ClientAttestation/HttpClientExtensions.cs
@@ -0,0 +1,10 @@
+namespace WalletFramework.Oid4Vc.ClientAttestation;
+
+public static class HttpClientExtensions
+{
+ public static void AddClientAttestationPopHeader(this HttpClient client, CombinedWalletAttestation clientAttestation)
+ {
+ client.DefaultRequestHeaders.Add("OAuth-Client-Attestation", clientAttestation.WalletInstanceAttestationJwt);
+ client.DefaultRequestHeaders.Add("OAuth-Client-Attestation-PoP", clientAttestation.WalletInstanceAttestationPopJwt);
+ }
+}
diff --git a/src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/WalletInstanceAttestationJwt.cs b/src/WalletFramework.Oid4Vc/ClientAttestation/WalletInstanceAttestationJwt.cs
similarity index 92%
rename from src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/WalletInstanceAttestationJwt.cs
rename to src/WalletFramework.Oid4Vc/ClientAttestation/WalletInstanceAttestationJwt.cs
index 691f64e..7b94151 100644
--- a/src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/WalletInstanceAttestationJwt.cs
+++ b/src/WalletFramework.Oid4Vc/ClientAttestation/WalletInstanceAttestationJwt.cs
@@ -1,7 +1,7 @@
using WalletFramework.Core.Functional;
using WalletFramework.Core.Functional.Errors;
-namespace WalletFramework.Oid4Vc.Oid4Vci.AuthFlow.Models;
+namespace WalletFramework.Oid4Vc.ClientAttestation;
public struct WalletInstanceAttestationJwt
{
diff --git a/src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/WalletInstanceAttestationPopJwt.cs b/src/WalletFramework.Oid4Vc/ClientAttestation/WalletInstanceAttestationPopJwt.cs
similarity index 86%
rename from src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/WalletInstanceAttestationPopJwt.cs
rename to src/WalletFramework.Oid4Vc/ClientAttestation/WalletInstanceAttestationPopJwt.cs
index 1cd8e84..bfc19e0 100644
--- a/src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/WalletInstanceAttestationPopJwt.cs
+++ b/src/WalletFramework.Oid4Vc/ClientAttestation/WalletInstanceAttestationPopJwt.cs
@@ -1,4 +1,4 @@
-namespace WalletFramework.Oid4Vc.Oid4Vci.AuthFlow.Models;
+namespace WalletFramework.Oid4Vc.ClientAttestation;
public struct WalletInstanceAttestationPopJwt
{
diff --git a/src/WalletFramework.Oid4Vc/Oid4Vp/Models/HaipAuthorizationRequestUri.cs b/src/WalletFramework.Oid4Vc/Oid4Vp/Models/HaipAuthorizationRequestUri.cs
index 81e72c8..2cc271c 100644
--- a/src/WalletFramework.Oid4Vc/Oid4Vp/Models/HaipAuthorizationRequestUri.cs
+++ b/src/WalletFramework.Oid4Vc/Oid4Vp/Models/HaipAuthorizationRequestUri.cs
@@ -25,9 +25,6 @@ public class HaipAuthorizationRequestUri
///
public static HaipAuthorizationRequestUri FromUri(Uri uri)
{
- if (uri.Scheme is not ("haip" or "openid4vp" or "mdoc-openid4vp"))
- throw new InvalidOperationException("Invalid Scheme. Must be haip or openid4vp");
-
var request = uri.GetQueryParam("request_uri");
if (string.IsNullOrEmpty(request))
throw new InvalidOperationException("HAIP requires request_uri parameter");
diff --git a/src/WalletFramework.Oid4Vc/Oid4Vp/Services/IOid4VpClientService.cs b/src/WalletFramework.Oid4Vc/Oid4Vp/Services/IOid4VpClientService.cs
index b79a436..bf722d8 100644
--- a/src/WalletFramework.Oid4Vc/Oid4Vp/Services/IOid4VpClientService.cs
+++ b/src/WalletFramework.Oid4Vc/Oid4Vp/Services/IOid4VpClientService.cs
@@ -1,5 +1,6 @@
using WalletFramework.Oid4Vc.Oid4Vp.Models;
+using WalletFramework.Oid4Vc.ClientAttestation;
namespace WalletFramework.Oid4Vc.Oid4Vp.Services;
///
@@ -22,10 +23,12 @@ public interface IOid4VpClientService
///
///
///
+ ///
///
/// A task representing the asynchronous operation. The task result contains the Callback Url of the Authorization Response if present.
///
Task SendAuthorizationResponseAsync(
AuthorizationRequest authorizationRequest,
- IEnumerable selectedCredentials);
+ IEnumerable selectedCredentials,
+ CombinedWalletAttestation? combinedWalletAttestation = null);
}
diff --git a/src/WalletFramework.Oid4Vc/Oid4Vp/Services/Oid4VpClientService.cs b/src/WalletFramework.Oid4Vc/Oid4Vp/Services/Oid4VpClientService.cs
index 4d8eb77..3696823 100644
--- a/src/WalletFramework.Oid4Vc/Oid4Vp/Services/Oid4VpClientService.cs
+++ b/src/WalletFramework.Oid4Vc/Oid4Vp/Services/Oid4VpClientService.cs
@@ -2,6 +2,7 @@
using LanguageExt;
using Microsoft.Extensions.Logging;
using SD_JWT.Models;
+using WalletFramework.Oid4Vc.ClientAttestation;
using WalletFramework.Core.Credentials.Abstractions;
using WalletFramework.Core.Functional;
using WalletFramework.MdocLib;
@@ -10,7 +11,6 @@
using WalletFramework.MdocLib.Elements;
using WalletFramework.MdocLib.Security;
using WalletFramework.MdocVc;
-using WalletFramework.Oid4Vc.Oid4Vci.Abstractions;
using WalletFramework.Oid4Vc.Oid4Vci.CredConfiguration.Models;
using WalletFramework.Oid4Vc.Oid4Vp.Models;
using WalletFramework.Oid4Vc.Oid4Vp.PresentationExchange.Services;
@@ -82,7 +82,8 @@ public Oid4VpClientService(
///
public async Task SendAuthorizationResponseAsync(
AuthorizationRequest authorizationRequest,
- IEnumerable selectedCredentials)
+ IEnumerable selectedCredentials,
+ CombinedWalletAttestation? clientAttestation = null)
{
var credentials = selectedCredentials.ToList();
@@ -171,6 +172,8 @@ from path in field.Path.Select(path => path.TrimStart('$', '.'))
var httpClient = _httpClientFactory.CreateClient();
httpClient.DefaultRequestHeaders.Clear();
+ if (clientAttestation is not null)
+ httpClient.AddClientAttestationPopHeader(clientAttestation);
var json = SerializeObject(authorizationResponse);
var nameValueCollection = DeserializeObject>(json)!.ToList();