7
7
using System . Security . Claims ;
8
8
using System . Threading . Tasks ;
9
9
using BenchmarkDotNet . Attributes ;
10
+ using BenchmarkDotNet . Configs ;
10
11
using Microsoft . IdentityModel . JsonWebTokens ;
11
12
using Microsoft . IdentityModel . Tokens ;
12
13
13
14
namespace Microsoft . IdentityModel . Benchmarks
14
15
{
15
16
// dotnet run -c release -f net8.0 --filter Microsoft.IdentityModel.Benchmarks.ValidateTokenAsyncTests*
16
17
18
+ [ GroupBenchmarksBy ( BenchmarkLogicalGroupRule . ByCategory ) ]
17
19
public class ValidateTokenAsyncTests
18
20
{
21
+ private CallContext _callContext ;
19
22
private JsonWebTokenHandler _jsonWebTokenHandler ;
20
23
private JwtSecurityTokenHandler _jwtSecurityTokenHandler ;
21
24
private SecurityTokenDescriptor _tokenDescriptor ;
22
25
private SecurityTokenDescriptor _tokenDescriptorExtendedClaims ;
23
26
private string _jws ;
24
27
private string _jwsExtendedClaims ;
25
- private TokenValidationParameters _validationParameters ;
28
+ private TokenValidationParameters _tokenValidationParameters ;
29
+ private TokenValidationParameters _invalidTokenValidationParameters ;
30
+ private ValidationParameters _validationParameters ;
31
+ private ValidationParameters _invalidValidationParameters ;
26
32
27
33
[ GlobalSetup ]
28
34
public void Setup ( )
@@ -46,29 +52,133 @@ public void Setup()
46
52
_jwtSecurityTokenHandler = new JwtSecurityTokenHandler ( ) ;
47
53
_jwtSecurityTokenHandler . SetDefaultTimesOnTokenCreation = false ;
48
54
49
- _validationParameters = new TokenValidationParameters ( )
55
+ _tokenValidationParameters = new TokenValidationParameters ( )
50
56
{
51
57
ValidAudience = BenchmarkUtils . Audience ,
52
58
ValidateLifetime = true ,
53
59
ValidIssuer = BenchmarkUtils . Issuer ,
54
60
IssuerSigningKey = BenchmarkUtils . SigningCredentialsRsaSha256 . Key ,
55
61
} ;
62
+
63
+ _validationParameters = new ValidationParameters ( ) ;
64
+ _validationParameters . ValidAudiences . Add ( BenchmarkUtils . Audience ) ;
65
+ _validationParameters . ValidIssuers . Add ( BenchmarkUtils . Issuer ) ;
66
+ _validationParameters . IssuerSigningKeys . Add ( BenchmarkUtils . SigningCredentialsRsaSha256 . Key ) ;
67
+
68
+ _invalidTokenValidationParameters = new TokenValidationParameters ( )
69
+ {
70
+ ValidAudience = BenchmarkUtils . Audience ,
71
+ ValidateLifetime = true ,
72
+ ValidIssuer = BenchmarkUtils . Issuer ,
73
+ ValidateIssuerSigningKey = true ,
74
+ ValidateTokenReplay = true ,
75
+ ValidateSignatureLast = true
76
+ } ;
77
+
78
+ _invalidValidationParameters = new ValidationParameters ( ) ;
79
+ _invalidValidationParameters . ValidAudiences . Add ( BenchmarkUtils . Audience ) ;
80
+ _invalidValidationParameters . ValidIssuers . Add ( BenchmarkUtils . Issuer ) ;
81
+
82
+ _callContext = new CallContext ( ) ;
83
+ }
84
+
85
+ [ BenchmarkCategory ( "ValidateTokenAsyncWithTokenValidationParameters" ) , Benchmark ]
86
+ public async Task < TokenValidationResult > JwtSecurityTokenHandler_ValidateTokenAsync ( ) => await _jwtSecurityTokenHandler . ValidateTokenAsync ( _jws , _tokenValidationParameters ) . ConfigureAwait ( false ) ;
87
+
88
+ [ BenchmarkCategory ( "ValidateTokenAsyncWithTokenValidationParameters" ) , Benchmark ( Baseline = true ) ]
89
+ public async Task < TokenValidationResult > JsonWebTokenHandler_ValidateTokenAsyncWithTVP ( ) => await _jsonWebTokenHandler . ValidateTokenAsync ( _jws , _tokenValidationParameters ) . ConfigureAwait ( false ) ;
90
+
91
+ [ BenchmarkCategory ( "ValidateTokenAsyncWithTokenValidationParameters" ) , Benchmark ]
92
+ public async Task < TokenValidationResult > JsonWebTokenHandler_ValidateTokenAsyncWithTVPUsingModifiedClone ( )
93
+ {
94
+ var tokenValidationParameters = _tokenValidationParameters . Clone ( ) ;
95
+ tokenValidationParameters . ValidIssuer = "different-issuer" ;
96
+ tokenValidationParameters . ValidAudience = "different-audience" ;
97
+ tokenValidationParameters . ValidateLifetime = false ;
98
+ return await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , tokenValidationParameters ) . ConfigureAwait ( false ) ;
99
+ }
100
+
101
+ [ BenchmarkCategory ( "ValidateTokenAsyncWithTokenValidationParameters" ) , Benchmark ]
102
+ public async Task < TokenValidationResult > JsonWebTokenHandler_ValidateTokenAsyncWithTVP_SucceedOnThirdAttempt ( )
103
+ {
104
+ TokenValidationResult result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidTokenValidationParameters ) . ConfigureAwait ( false ) ;
105
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidTokenValidationParameters ) . ConfigureAwait ( false ) ;
106
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _tokenValidationParameters ) . ConfigureAwait ( false ) ;
107
+
108
+ return result ;
109
+ }
110
+
111
+ [ BenchmarkCategory ( "ValidateTokenAsyncWithTokenValidationParameters" ) , Benchmark ]
112
+ public async Task < TokenValidationResult > JsonWebTokenHandler_ValidateTokenAsyncWithTVPUsingClone_SucceedOnThirdAttempt ( )
113
+ {
114
+ TokenValidationResult result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidTokenValidationParameters . Clone ( ) ) . ConfigureAwait ( false ) ;
115
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidTokenValidationParameters . Clone ( ) ) . ConfigureAwait ( false ) ;
116
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _tokenValidationParameters . Clone ( ) ) . ConfigureAwait ( false ) ;
117
+
118
+ return result ;
56
119
}
57
120
58
- [ Benchmark ]
59
- public async Task < List < Claim > > JsonWebTokenHandler_ValidateTokenAsync_CreateClaims ( )
121
+ [ BenchmarkCategory ( "ValidateTokenAsyncWithTokenValidationParameters" ) , Benchmark ]
122
+ public async Task < TokenValidationResult > JsonWebTokenHandler_ValidateTokenAsyncWithTVP_SucceedOnFifthAttempt ( )
60
123
{
61
- var result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _validationParameters ) . ConfigureAwait ( false ) ;
124
+ TokenValidationResult result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidTokenValidationParameters ) . ConfigureAwait ( false ) ;
125
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidTokenValidationParameters ) . ConfigureAwait ( false ) ;
126
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidTokenValidationParameters ) . ConfigureAwait ( false ) ;
127
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidTokenValidationParameters ) . ConfigureAwait ( false ) ;
128
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _tokenValidationParameters ) . ConfigureAwait ( false ) ;
129
+
130
+ return result ;
131
+ }
132
+
133
+ [ BenchmarkCategory ( "ValidateTokenAsyncWithTokenValidationParameters" ) , Benchmark ]
134
+ public async Task < TokenValidationResult > JsonWebTokenHandler_ValidateTokenAsyncWithTVPUsingClone_SucceedOnFifthAttempt ( )
135
+ {
136
+ TokenValidationResult result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidTokenValidationParameters . Clone ( ) ) . ConfigureAwait ( false ) ;
137
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidTokenValidationParameters . Clone ( ) ) . ConfigureAwait ( false ) ;
138
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidTokenValidationParameters . Clone ( ) ) . ConfigureAwait ( false ) ;
139
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidTokenValidationParameters . Clone ( ) ) . ConfigureAwait ( false ) ;
140
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _tokenValidationParameters . Clone ( ) ) . ConfigureAwait ( false ) ;
141
+
142
+ return result ;
143
+ }
144
+
145
+ [ BenchmarkCategory ( "ValidateTokenAsyncWithValidationParameters" ) , Benchmark ( Baseline = true ) ]
146
+ public async Task < TokenValidationResult > JsonWebTokenHandler_ValidateTokenAsyncWithVP ( ) => await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _validationParameters , _callContext , null ) . ConfigureAwait ( false ) ;
147
+
148
+ [ BenchmarkCategory ( "ValidateTokenAsyncWithValidationParameters" ) , Benchmark ]
149
+ public async Task < TokenValidationResult > JsonWebTokenHandler_ValidateTokenAsyncWithVP_SucceedOnThirdAttempt ( )
150
+ {
151
+ var result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidValidationParameters , _callContext , null ) . ConfigureAwait ( false ) ;
152
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidValidationParameters , _callContext , null ) . ConfigureAwait ( false ) ;
153
+ return await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _validationParameters , _callContext , null ) . ConfigureAwait ( false ) ;
154
+ }
155
+
156
+ [ BenchmarkCategory ( "ValidateTokenAsyncWithValidationParameters" ) , Benchmark ]
157
+ public async Task < TokenValidationResult > JsonWebTokenHandler_ValidateTokenAsyncWithVP_SucceedOnFifthAttempt ( )
158
+ {
159
+ var result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidValidationParameters , _callContext , null ) . ConfigureAwait ( false ) ;
160
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidValidationParameters , _callContext , null ) . ConfigureAwait ( false ) ;
161
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidValidationParameters , _callContext , null ) . ConfigureAwait ( false ) ;
162
+ result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _invalidValidationParameters , _callContext , null ) . ConfigureAwait ( false ) ;
163
+ return await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _validationParameters , _callContext , null ) . ConfigureAwait ( false ) ;
164
+ }
165
+
166
+ [ BenchmarkCategory ( "ValidateTokenAsyncClaimAccess" ) , Benchmark ]
167
+ public async Task < List < Claim > > JsonWebTokenHandler_ValidateTokenAsyncWithVP_CreateClaims ( )
168
+ {
169
+ var result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _validationParameters , _callContext , null ) . ConfigureAwait ( false ) ;
62
170
var claimsIdentity = result . ClaimsIdentity ;
63
171
var claims = claimsIdentity . Claims ;
64
172
return claims . ToList ( ) ;
65
173
}
66
174
67
- [ Benchmark ]
68
- public async Task < TokenValidationResult > JsonWebTokenHandler_ValidateTokenAsync ( ) => await _jsonWebTokenHandler . ValidateTokenAsync ( _jws , _validationParameters ) . ConfigureAwait ( false ) ;
69
-
70
- [ Benchmark ]
71
- public async Task < TokenValidationResult > JwtSecurityTokenHandler_ValidateTokenAsync ( ) => await _jwtSecurityTokenHandler . ValidateTokenAsync ( _jws , _validationParameters ) . ConfigureAwait ( false ) ;
72
-
175
+ [ BenchmarkCategory ( "ValidateTokenAsyncClaimAccess" ) , Benchmark ]
176
+ public async Task < List < Claim > > JsonWebTokenHandler_ValidateTokenAsyncWithTVP_CreateClaims ( )
177
+ {
178
+ var result = await _jsonWebTokenHandler . ValidateTokenAsync ( _jwsExtendedClaims , _tokenValidationParameters ) . ConfigureAwait ( false ) ;
179
+ var claimsIdentity = result . ClaimsIdentity ;
180
+ var claims = claimsIdentity . Claims ;
181
+ return claims . ToList ( ) ;
182
+ }
73
183
}
74
184
}
0 commit comments