33
44using System . Text . Json ;
55using Duende . AccessTokenManagement ;
6+ using Duende . AccessTokenManagement . DPoP ;
67using Duende . AccessTokenManagement . OpenIdConnect ;
7- using Duende . IdentityModel . Client ;
88using Microsoft . AspNetCore . Authentication ;
99using Microsoft . AspNetCore . Authorization ;
1010using Microsoft . AspNetCore . Mvc ;
@@ -15,11 +15,13 @@ public class HomeController : Controller
1515{
1616 private readonly IHttpClientFactory _httpClientFactory ;
1717 private readonly IUserTokenManager _tokenManager ;
18+ private readonly IDPoPProofService _dPoPProofService ;
1819
19- public HomeController ( IHttpClientFactory httpClientFactory , IUserTokenManager tokenManager )
20+ public HomeController ( IHttpClientFactory httpClientFactory , IUserTokenManager tokenManager , IDPoPProofService dPoPProofService )
2021 {
2122 _httpClientFactory = httpClientFactory ;
2223 _tokenManager = tokenManager ;
24+ _dPoPProofService = dPoPProofService ;
2325 }
2426
2527 [ AllowAnonymous ]
@@ -39,11 +41,33 @@ public HomeController(IHttpClientFactory httpClientFactory, IUserTokenManager to
3941 public async Task < IActionResult > CallApiAsUserManual ( )
4042 {
4143 var token = await _tokenManager . GetAccessTokenAsync ( User ) . GetToken ( ) ;
44+
45+ var url = new Uri ( "https://demo.duendesoftware.com/api/dpop/test" ) ;
46+ var request = new HttpRequestMessage ( HttpMethod . Get , url ) ;
47+ request . Headers . Authorization = new ( "DPoP" , token . AccessToken . ToString ( ) ) ;
48+
49+ if ( token . DPoPJsonWebKey is { } key )
50+ {
51+ var proof = await _dPoPProofService . CreateProofTokenAsync ( new DPoPProofRequest
52+ {
53+ Url = url ,
54+ Method = HttpMethod . Get ,
55+ DPoPProofKey = key ,
56+ AccessToken = token . AccessToken ,
57+ } ) ;
58+
59+ if ( proof is not null )
60+ {
61+ request . SetDPoPProofToken ( proof . Value ) ;
62+ }
63+ }
64+
4265 var client = _httpClientFactory . CreateClient ( ) ;
43- client . SetBearerToken ( token . AccessToken . ToString ( ) ! ) ;
66+ var response = await client . SendAsync ( request ) ;
67+ response . EnsureSuccessStatusCode ( ) ;
4468
45- var response = await client . GetStringAsync ( "https://demo.duendesoftware.com/api/dpop/test" ) ;
46- ViewBag . Json = PrettyPrint ( response ) ;
69+ var json = await response . Content . ReadAsStringAsync ( ) ;
70+ ViewBag . Json = PrettyPrint ( json ) ;
4771
4872 return View ( "CallApi" ) ;
4973 }
0 commit comments