Skip to content
This repository was archived by the owner on Sep 8, 2025. It is now read-only.

Commit ac28cb0

Browse files
Add extensions methods for configuring DPoP
1 parent b941615 commit ac28cb0

File tree

3 files changed

+42
-13
lines changed

3 files changed

+42
-13
lines changed

clients/ConsoleClientWithBrowserAndDPoP/Program.cs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ private static async Task SignIn()
3838

3939
var proofKey = GetProofKey();
4040

41-
var tokenDpopHandler = new ProofTokenMessageHandler(proofKey, new SocketsHttpHandler());
42-
var apiDpopHandler = new ProofTokenMessageHandler(proofKey, new SocketsHttpHandler());
43-
4441
var options = new OidcClientOptions
4542
{
4643
Authority = Authority,
@@ -49,11 +46,10 @@ private static async Task SignIn()
4946
Scope = "openid profile api offline_access",
5047
FilterClaims = false,
5148
Browser = browser,
52-
53-
BackchannelHandler = tokenDpopHandler,
54-
RefreshTokenInnerHttpHandler = apiDpopHandler
5549
};
5650

51+
options.ConfigureDPoP(proofKey);
52+
5753
var serilog = new LoggerConfiguration()
5854
.MinimumLevel.Debug()
5955
.Enrich.FromLogContext()
@@ -68,13 +64,7 @@ private static async Task SignIn()
6864
if (File.Exists("refresh_token"))
6965
{
7066
var refreshToken = File.ReadAllText("refresh_token");
71-
72-
var handler = new RefreshTokenDelegatingHandler(
73-
_oidcClient,
74-
null,
75-
refreshToken,
76-
"DPoP",
77-
apiDpopHandler);
67+
var handler = _oidcClient.CreateDPoPHandler(proofKey, refreshToken);
7868

7969
_apiClient = new HttpClient(handler)
8070
{

src/DPoP/DPoP.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,8 @@
4747
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
4848
</ItemGroup>
4949

50+
<ItemGroup>
51+
<ProjectReference Include="..\OidcClient\OidcClient.csproj" />
52+
</ItemGroup>
53+
5054
</Project>

src/DPoP/OidcClientExtensions.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using System.Net.Http;
2+
3+
namespace IdentityModel.OidcClient.DPoP;
4+
5+
public static class OidcClientExtensions
6+
{
7+
public static void ConfigureDPoP(this OidcClientOptions options,
8+
string proofKey,
9+
HttpMessageHandler? tokenEndpointInnerHandler = null,
10+
HttpMessageHandler? apiInnerHandler = null)
11+
{
12+
var tokenDpopHandler = new ProofTokenMessageHandler(proofKey, tokenEndpointInnerHandler ?? new HttpClientHandler());
13+
var apiDpopHandler = new ProofTokenMessageHandler(proofKey, apiInnerHandler ?? new HttpClientHandler());
14+
15+
options.BackchannelHandler = tokenDpopHandler;
16+
options.RefreshTokenInnerHttpHandler = apiDpopHandler;
17+
}
18+
19+
public static HttpMessageHandler CreateDPoPHandler(this OidcClient client,
20+
string proofKey,
21+
string refreshToken,
22+
HttpMessageHandler? apiInnerHandler = null)
23+
{
24+
var apiDpopHandler = new ProofTokenMessageHandler(proofKey, apiInnerHandler ?? new HttpClientHandler());
25+
26+
var handler = new RefreshTokenDelegatingHandler(
27+
client,
28+
null,
29+
refreshToken,
30+
"DPoP",
31+
apiDpopHandler);
32+
33+
return handler;
34+
}
35+
}

0 commit comments

Comments
 (0)