5
5
using System . Security . Cryptography . X509Certificates ;
6
6
using System . Threading . Tasks ;
7
7
using Clients ;
8
- using IdentityModel ;
8
+ using Duende . IdentityModel ;
9
9
using IdentityModel . Client ;
10
10
using Newtonsoft . Json . Linq ;
11
11
@@ -14,18 +14,18 @@ namespace ConsoleEphemeralMtlsClient
14
14
class Program
15
15
{
16
16
private static X509Certificate2 ClientCertificate ;
17
-
17
+
18
18
static async Task Main ( string [ ] args )
19
19
{
20
20
ClientCertificate = CreateClientCertificate ( "client" ) ;
21
-
21
+
22
22
var response = await RequestTokenAsync ( ) ;
23
23
response . Show ( ) ;
24
24
25
25
Console . ReadLine ( ) ;
26
26
await CallServiceAsync ( response . AccessToken ) ;
27
27
}
28
-
28
+
29
29
static async Task < TokenResponse > RequestTokenAsync ( )
30
30
{
31
31
var client = new HttpClient ( GetHandler ( ClientCertificate ) ) ;
@@ -37,7 +37,7 @@ static async Task<TokenResponse> RequestTokenAsync()
37
37
. TryGetValue ( OidcConstants . Discovery . MtlsEndpointAliases )
38
38
. Value < string > ( OidcConstants . Discovery . TokenEndpoint )
39
39
. ToString ( ) ;
40
-
40
+
41
41
var response = await client . RequestClientCredentialsTokenAsync ( new ClientCredentialsTokenRequest
42
42
{
43
43
Address = endpoint ,
@@ -64,17 +64,17 @@ static async Task CallServiceAsync(string token)
64
64
"\n \n Service claims:" . ConsoleGreen ( ) ;
65
65
Console . WriteLine ( JArray . Parse ( response ) ) ;
66
66
}
67
-
67
+
68
68
static X509Certificate2 CreateClientCertificate ( string name )
69
69
{
70
70
X500DistinguishedName distinguishedName = new X500DistinguishedName ( $ "CN={ name } ") ;
71
71
72
72
using ( var rsa = RSA . Create ( 2048 ) )
73
73
{
74
- var request = new CertificateRequest ( distinguishedName , rsa , HashAlgorithmName . SHA256 , RSASignaturePadding . Pkcs1 ) ;
74
+ var request = new CertificateRequest ( distinguishedName , rsa , HashAlgorithmName . SHA256 , RSASignaturePadding . Pkcs1 ) ;
75
75
76
76
request . CertificateExtensions . Add (
77
- new X509KeyUsageExtension ( X509KeyUsageFlags . DataEncipherment | X509KeyUsageFlags . KeyEncipherment | X509KeyUsageFlags . DigitalSignature , false ) ) ;
77
+ new X509KeyUsageExtension ( X509KeyUsageFlags . DataEncipherment | X509KeyUsageFlags . KeyEncipherment | X509KeyUsageFlags . DigitalSignature , false ) ) ;
78
78
79
79
request . CertificateExtensions . Add (
80
80
new X509EnhancedKeyUsageExtension (
@@ -83,7 +83,7 @@ static X509Certificate2 CreateClientCertificate(string name)
83
83
return request . CreateSelfSigned ( new DateTimeOffset ( DateTime . UtcNow . AddDays ( - 1 ) ) , new DateTimeOffset ( DateTime . UtcNow . AddDays ( 3650 ) ) ) ;
84
84
}
85
85
}
86
-
86
+
87
87
static SocketsHttpHandler GetHandler ( X509Certificate2 certificate )
88
88
{
89
89
var handler = new SocketsHttpHandler
0 commit comments