Skip to content

Commit 2b677b4

Browse files
authored
Enable optional client attestation in oid4vp (#162)
* enable optional client attestation in oid4vp Signed-off-by: Sebastian Bickerle <sebastian.bickerle@lissi.id> * removed custom scheme check on HaipAuthorizationRequestUri.cs Signed-off-by: Sebastian Bickerle <sebastian.bickerle@lissi.id> --------- Signed-off-by: Sebastian Bickerle <sebastian.bickerle@lissi.id>
1 parent 912ad59 commit 2b677b4

File tree

8 files changed

+25
-10
lines changed

8 files changed

+25
-10
lines changed

src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/ClientAttestationPopDetails.cs renamed to src/WalletFramework.Oid4Vc/ClientAttestation/ClientAttestationPopDetails.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using LanguageExt;
22
using static System.String;
33

4-
namespace WalletFramework.Oid4Vc.Oid4Vci.AuthFlow.Models;
4+
namespace WalletFramework.Oid4Vc.ClientAttestation;
55

66
public record ClientAttestationPopDetails
77
{

src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/CombinedWalletAttestation.cs renamed to src/WalletFramework.Oid4Vc/ClientAttestation/CombinedWalletAttestation.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace WalletFramework.Oid4Vc.Oid4Vci.AuthFlow.Models;
1+
using WalletFramework.Oid4Vc.Oid4Vci.AuthFlow.Models;
2+
3+
namespace WalletFramework.Oid4Vc.ClientAttestation;
24

35
public record CombinedWalletAttestation
46
{
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace WalletFramework.Oid4Vc.ClientAttestation;
2+
3+
public static class HttpClientExtensions
4+
{
5+
public static void AddClientAttestationPopHeader(this HttpClient client, CombinedWalletAttestation clientAttestation)
6+
{
7+
client.DefaultRequestHeaders.Add("OAuth-Client-Attestation", clientAttestation.WalletInstanceAttestationJwt);
8+
client.DefaultRequestHeaders.Add("OAuth-Client-Attestation-PoP", clientAttestation.WalletInstanceAttestationPopJwt);
9+
}
10+
}

src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/WalletInstanceAttestationJwt.cs renamed to src/WalletFramework.Oid4Vc/ClientAttestation/WalletInstanceAttestationJwt.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using WalletFramework.Core.Functional;
22
using WalletFramework.Core.Functional.Errors;
33

4-
namespace WalletFramework.Oid4Vc.Oid4Vci.AuthFlow.Models;
4+
namespace WalletFramework.Oid4Vc.ClientAttestation;
55

66
public struct WalletInstanceAttestationJwt
77
{

src/WalletFramework.Oid4Vc/Oid4Vci/AuthFlow/Models/WalletInstanceAttestationPopJwt.cs renamed to src/WalletFramework.Oid4Vc/ClientAttestation/WalletInstanceAttestationPopJwt.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace WalletFramework.Oid4Vc.Oid4Vci.AuthFlow.Models;
1+
namespace WalletFramework.Oid4Vc.ClientAttestation;
22

33
public struct WalletInstanceAttestationPopJwt
44
{

src/WalletFramework.Oid4Vc/Oid4Vp/Models/HaipAuthorizationRequestUri.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ public class HaipAuthorizationRequestUri
2525
/// <exception cref="InvalidOperationException"></exception>
2626
public static HaipAuthorizationRequestUri FromUri(Uri uri)
2727
{
28-
if (uri.Scheme is not ("haip" or "openid4vp" or "mdoc-openid4vp"))
29-
throw new InvalidOperationException("Invalid Scheme. Must be haip or openid4vp");
30-
3128
var request = uri.GetQueryParam("request_uri");
3229
if (string.IsNullOrEmpty(request))
3330
throw new InvalidOperationException("HAIP requires request_uri parameter");

src/WalletFramework.Oid4Vc/Oid4Vp/Services/IOid4VpClientService.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using WalletFramework.Oid4Vc.Oid4Vp.Models;
22

3+
using WalletFramework.Oid4Vc.ClientAttestation;
34
namespace WalletFramework.Oid4Vc.Oid4Vp.Services;
45

56
/// <summary>
@@ -22,10 +23,12 @@ public interface IOid4VpClientService
2223
/// </summary>
2324
/// <param name="authorizationRequest"></param>
2425
/// <param name="selectedCredentials"></param>
26+
/// <param name="combinedWalletAttestation"></param>
2527
/// <returns>
2628
/// A task representing the asynchronous operation. The task result contains the Callback Url of the Authorization Response if present.
2729
/// </returns>
2830
Task<Uri?> SendAuthorizationResponseAsync(
2931
AuthorizationRequest authorizationRequest,
30-
IEnumerable<SelectedCredential> selectedCredentials);
32+
IEnumerable<SelectedCredential> selectedCredentials,
33+
CombinedWalletAttestation? combinedWalletAttestation = null);
3134
}

src/WalletFramework.Oid4Vc/Oid4Vp/Services/Oid4VpClientService.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using LanguageExt;
33
using Microsoft.Extensions.Logging;
44
using SD_JWT.Models;
5+
using WalletFramework.Oid4Vc.ClientAttestation;
56
using WalletFramework.Core.Credentials.Abstractions;
67
using WalletFramework.Core.Functional;
78
using WalletFramework.MdocLib;
@@ -10,7 +11,6 @@
1011
using WalletFramework.MdocLib.Elements;
1112
using WalletFramework.MdocLib.Security;
1213
using WalletFramework.MdocVc;
13-
using WalletFramework.Oid4Vc.Oid4Vci.Abstractions;
1414
using WalletFramework.Oid4Vc.Oid4Vci.CredConfiguration.Models;
1515
using WalletFramework.Oid4Vc.Oid4Vp.Models;
1616
using WalletFramework.Oid4Vc.Oid4Vp.PresentationExchange.Services;
@@ -82,7 +82,8 @@ public Oid4VpClientService(
8282
/// <inheritdoc />
8383
public async Task<Uri?> SendAuthorizationResponseAsync(
8484
AuthorizationRequest authorizationRequest,
85-
IEnumerable<SelectedCredential> selectedCredentials)
85+
IEnumerable<SelectedCredential> selectedCredentials,
86+
CombinedWalletAttestation? clientAttestation = null)
8687
{
8788
var credentials = selectedCredentials.ToList();
8889

@@ -171,6 +172,8 @@ from path in field.Path.Select(path => path.TrimStart('$', '.'))
171172

172173
var httpClient = _httpClientFactory.CreateClient();
173174
httpClient.DefaultRequestHeaders.Clear();
175+
if (clientAttestation is not null)
176+
httpClient.AddClientAttestationPopHeader(clientAttestation);
174177

175178
var json = SerializeObject(authorizationResponse);
176179
var nameValueCollection = DeserializeObject<Dictionary<string, string>>(json)!.ToList();

0 commit comments

Comments
 (0)