@@ -73,6 +73,16 @@ func TestJwtMetrics(t *testing.T) {
73
73
},
74
74
expectedTag : "missing-token" ,
75
75
},
76
+ {
77
+ name : "missing-token with claims" ,
78
+ filters : `jwtMetrics("{claims: [{iss: foo}, {iss: bar}]}")` ,
79
+ request : & http.Request {Method : "GET" , Host : "foo.test" },
80
+ status : http .StatusOK ,
81
+ expected : map [string ]int64 {
82
+ "jwtMetrics.custom.GET.foo_test.200.missing-token" : 1 ,
83
+ },
84
+ expectedTag : "missing-token" ,
85
+ },
76
86
{
77
87
name : "invalid-token-type" ,
78
88
filters : `jwtMetrics("{issuers: [foo, bar]}")` ,
@@ -85,6 +95,18 @@ func TestJwtMetrics(t *testing.T) {
85
95
},
86
96
expectedTag : "invalid-token-type" ,
87
97
},
98
+ {
99
+ name : "invalid-token-type with claims" ,
100
+ filters : `jwtMetrics("{claims: [{iss: foo}, {iss: bar}]}")` ,
101
+ request : & http.Request {Method : "GET" , Host : "foo.test" ,
102
+ Header : http.Header {"Authorization" : []string {"Basic foobarbaz" }},
103
+ },
104
+ status : http .StatusOK ,
105
+ expected : map [string ]int64 {
106
+ "jwtMetrics.custom.GET.foo_test.200.invalid-token-type" : 1 ,
107
+ },
108
+ expectedTag : "invalid-token-type" ,
109
+ },
88
110
{
89
111
name : "invalid-token" ,
90
112
filters : `jwtMetrics("{issuers: [foo, bar]}")` ,
@@ -97,6 +119,18 @@ func TestJwtMetrics(t *testing.T) {
97
119
},
98
120
expectedTag : "invalid-token" ,
99
121
},
122
+ {
123
+ name : "invalid-token with claims" ,
124
+ filters : `jwtMetrics("{claims: [{iss: foo}, {iss: bar}]}")` ,
125
+ request : & http.Request {Method : "GET" , Host : "foo.test" ,
126
+ Header : http.Header {"Authorization" : []string {"Bearer invalid-token" }},
127
+ },
128
+ status : http .StatusOK ,
129
+ expected : map [string ]int64 {
130
+ "jwtMetrics.custom.GET.foo_test.200.invalid-token" : 1 ,
131
+ },
132
+ expectedTag : "invalid-token" ,
133
+ },
100
134
{
101
135
name : "missing-issuer" ,
102
136
filters : `jwtMetrics("{issuers: [foo, bar]}")` ,
@@ -126,7 +160,21 @@ func TestJwtMetrics(t *testing.T) {
126
160
expectedTag : "invalid-issuer" ,
127
161
},
128
162
{
129
- name : "no invalid-issuer for empty issuers" ,
163
+ name : "invalid-claims with one claim key" ,
164
+ filters : `jwtMetrics("{claims: [{iss: foo}, {iss: bar}]}")` ,
165
+ request : & http.Request {Method : "GET" , Host : "foo.test" ,
166
+ Header : http.Header {"Authorization" : []string {
167
+ "Bearer header." + marshalBase64JSON (t , map [string ]any {"iss" : "baz" }) + ".signature" ,
168
+ }},
169
+ },
170
+ status : http .StatusOK ,
171
+ expected : map [string ]int64 {
172
+ "jwtMetrics.custom.GET.foo_test.200.invalid-claims" : 1 ,
173
+ },
174
+ expectedTag : "invalid-claims" ,
175
+ },
176
+ {
177
+ name : "no invalid-issuer for empty issuers/claims" ,
130
178
filters : `jwtMetrics()` ,
131
179
request : & http.Request {Method : "GET" , Host : "foo.test" ,
132
180
Header : http.Header {"Authorization" : []string {
@@ -158,6 +206,53 @@ func TestJwtMetrics(t *testing.T) {
158
206
status : http .StatusOK ,
159
207
expected : map [string ]int64 {},
160
208
},
209
+ {
210
+ name : "no invalid-claims when matches first" ,
211
+ filters : `jwtMetrics("{claims: [{iss: foo, bat: ball}, {iss: bar}]}")` ,
212
+ request : & http.Request {Method : "GET" , Host : "foo.test" ,
213
+ Header : http.Header {"Authorization" : []string {
214
+ "Bearer header." + marshalBase64JSON (t , map [string ]any {"iss" : "foo" , "bat" : "ball" }) + ".signature" ,
215
+ }},
216
+ },
217
+ status : http .StatusOK ,
218
+ expected : map [string ]int64 {},
219
+ },
220
+ {
221
+ name : "no invalid-claims when matches second" ,
222
+ filters : `jwtMetrics("{claims: [{iss: foo, bar: baz}, {iss: bar}]}")` ,
223
+ request : & http.Request {Method : "GET" , Host : "foo.test" ,
224
+ Header : http.Header {"Authorization" : []string {
225
+ "Bearer header." + marshalBase64JSON (t , map [string ]any {"iss" : "bar" }) + ".signature" ,
226
+ }},
227
+ },
228
+ status : http .StatusOK ,
229
+ expected : map [string ]int64 {},
230
+ },
231
+ {
232
+ name : "invalid-claims when no full claim matches" ,
233
+ filters : `jwtMetrics("{claims: [{iss: foo, bar: baz}, {iss: bar}]}")` ,
234
+ request : & http.Request {Method : "GET" , Host : "foo.test" ,
235
+ Header : http.Header {"Authorization" : []string {
236
+ "Bearer header." + marshalBase64JSON (t , map [string ]any {"iss" : "foo" , "bar" : "bat" }) + ".signature" ,
237
+ }},
238
+ },
239
+ status : http .StatusOK ,
240
+ expected : map [string ]int64 {
241
+ "jwtMetrics.custom.GET.foo_test.200.invalid-claims" : 1 ,
242
+ },
243
+ expectedTag : "invalid-claims" ,
244
+ },
245
+ {
246
+ name : "no invalid-claims when full claim matches and token has extra keys" ,
247
+ filters : `jwtMetrics("{claims: [{iss: foo, bar: baz}, {iss: bar}]}")` ,
248
+ request : & http.Request {Method : "GET" , Host : "foo.test" ,
249
+ Header : http.Header {"Authorization" : []string {
250
+ "Bearer header." + marshalBase64JSON (t , map [string ]any {"iss" : "foo" , "bar" : "baz" , "bat" : "ball" }) + ".signature" ,
251
+ }},
252
+ },
253
+ status : http .StatusOK ,
254
+ expected : map [string ]int64 {},
255
+ },
161
256
{
162
257
name : "missing-token without opt-out" ,
163
258
filters : `jwtMetrics("{issuers: [foo, bar], optOutAnnotations: [oauth.disabled]}")` ,
0 commit comments