@@ -16,6 +16,25 @@ import (
16
16
17
17
var errKeyFuncError error = fmt .Errorf ("error loading key" )
18
18
19
+ // customClaimsWithDifferentTypes embeds the standard jwt.RegisteredClaims
20
+ // struct, along with other valid JSON Data Types
21
+ type customClaimsWithDifferentTypes struct {
22
+ StringClaim string `json:"stringClaim"`
23
+ IntClaim int `json:"intClaim"`
24
+ BoolClaim bool `json:"boolClaim"`
25
+ UintClaim uint `json:"uintClaim"`
26
+ FloatClaim float64 `json:"floatClaim"`
27
+ SliceClaim []int `json:"sliceClaim"`
28
+ ObjectClaim CustomObject `json:"objectClaim"`
29
+ NilPointerClaim * int `json:"nilPointerClaim"`
30
+
31
+ jwt.RegisteredClaims
32
+ }
33
+
34
+ type CustomObject struct {
35
+ Property string `json:"property"`
36
+ }
37
+
19
38
var (
20
39
jwtTestDefaultKey * rsa.PublicKey
21
40
jwtTestRSAPrivateKey * rsa.PrivateKey
@@ -113,6 +132,47 @@ var jwtTestData = []struct {
113
132
nil ,
114
133
jwt .SigningMethodRS256 ,
115
134
},
135
+ /*
136
+ custom claims with JSON Data Types
137
+ Payload:
138
+ {
139
+ "stringClaim": "string",
140
+ "intClaim": -1,
141
+ "boolClaim": true,
142
+ "uintClaim": 1,
143
+ "floatClaim": 5.01,
144
+ "sliceClaim": [
145
+ -1,
146
+ 0,
147
+ 1
148
+ ],
149
+ "objectClaim": {
150
+ "property": "something"
151
+ },
152
+ "nilPointerClaim": null
153
+ }
154
+ */
155
+ {
156
+ "custom claims with JSON Data Types" ,
157
+ "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdHJpbmdDbGFpbSI6InN0cmluZyIsImludENsYWltIjotMSwiYm9vbENsYWltIjp0cnVlLCJ1aW50Q2xhaW0iOjEsImZsb2F0Q2xhaW0iOjUuMDEsInNsaWNlQ2xhaW0iOlstMSwwLDFdLCJvYmplY3RDbGFpbSI6eyJwcm9wZXJ0eSI6InNvbWV0aGluZyJ9LCJuaWxQb2ludGVyQ2xhaW0iOm51bGx9.08Q-I2ISws_DaZnxjZ39j5EtmhGSo6dwigxMlV42kKeSVIiMDAGdukYDMJvyurrvLV19gMWkAHdLp5j23qHhP_KUcj2dKlooIFkkRvp2XuTdOtGsyCy5X7jHMYhyR4pMW7y5jor1njrxuDPBvI_oxjs-EZEYqjk8Su4_LAS5AmI2wnTR5DQAAF70WqZAvfnEwavtKSuSCYZS8ZcblBvhfufnjoXtOHbjFnIN1hEzbiLFOe-Ka_tGegYy-7RgX65ohlAFV3By48rXAcr6PLk5eG2Hz9ZSJ6GR6bozqwwnbbm7loiJYtIw7nwQSeo2sRHCw9RFG61Rq33XNlUD_kYC8Q" ,
158
+ defaultKeyFunc ,
159
+ & customClaimsWithDifferentTypes {
160
+ StringClaim : "string" ,
161
+ IntClaim : - 1 ,
162
+ BoolClaim : true ,
163
+ UintClaim : 1 ,
164
+ FloatClaim : 5.01 ,
165
+ SliceClaim : []int {- 1 , 0 , 1 },
166
+ ObjectClaim : CustomObject {
167
+ Property : "something" ,
168
+ },
169
+ NilPointerClaim : nil ,
170
+ },
171
+ true ,
172
+ nil ,
173
+ nil ,
174
+ jwt .SigningMethodRS256 ,
175
+ },
116
176
{
117
177
"multiple keys, last matches" ,
118
178
"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJmb28iOiJiYXIifQ.FhkiHkoESI_cG3NPigFrxEk9Z60_oXrOT2vGm9Pn6RDgYNovYORQmmA0zs1AoAOf09ly2Nx2YAg6ABqAYga1AcMFkJljwxTT5fYphTuqpWdy4BELeSYJx5Ty2gmr8e7RonuUztrdD5WfPqLKMm1Ozp_T6zALpRmwTIW0QPnaBXaQD90FplAg46Iy1UlDKr-Eupy0i5SLch5Q-p2ZpaL_5fnTIUDlxC3pWhJTyx_71qDI-mAA_5lE_VdroOeflG56sSmDxopPEG3bFlSu1eowyBfxtu0_CuVd-M42RU75Zc4Gsj6uV77MBtbMrf4_7M_NUTSgoIF3fRqxrj0NzihIBg" ,
@@ -471,6 +531,8 @@ func TestParser_Parse(t *testing.T) {
471
531
token , err = parser .ParseWithClaims (data .tokenString , jwt.MapClaims {}, data .keyfunc )
472
532
case * jwt.RegisteredClaims :
473
533
token , err = parser .ParseWithClaims (data .tokenString , & jwt.RegisteredClaims {}, data .keyfunc )
534
+ case * customClaimsWithDifferentTypes :
535
+ token , err = parser .ParseWithClaims (data .tokenString , & customClaimsWithDifferentTypes {}, data .keyfunc )
474
536
case nil :
475
537
token , err = parser .ParseWithClaims (data .tokenString , nil , data .keyfunc )
476
538
}
@@ -550,6 +612,8 @@ func TestParser_ParseUnverified(t *testing.T) {
550
612
token , _ , err = parser .ParseUnverified (data .tokenString , jwt.MapClaims {})
551
613
case * jwt.RegisteredClaims :
552
614
token , _ , err = parser .ParseUnverified (data .tokenString , & jwt.RegisteredClaims {})
615
+ case * customClaimsWithDifferentTypes :
616
+ token , _ , err = parser .ParseUnverified (data .tokenString , & customClaimsWithDifferentTypes {})
553
617
}
554
618
555
619
if err != nil {
0 commit comments