@@ -45,8 +45,8 @@ describe("Plugin: jwt-keycloak (signature validator)", function()
4545 keys = { " key1" , " key2" },
4646 kids = { " kid1" , " kid2" },
4747 key_metadata = {
48- { alg = " RS256" , use = " sig" },
49- { alg = " RS256" , use = " sig" }
48+ { alg = " RS256" , use = " sig" , kty = " RSA " },
49+ { alg = " RS256" , use = " sig" , kty = " RSA " }
5050 }
5151 }
5252
@@ -65,7 +65,7 @@ describe("Plugin: jwt-keycloak (signature validator)", function()
6565 local public_keys = {
6666 keys = { " key1" },
6767 kids = { " kid1" },
68- key_metadata = { { alg = " ES256" , use = " sig" } }
68+ key_metadata = { { alg = " ES256" , use = " sig" , kty = " EC " } }
6969 }
7070
7171 local err = signature_validator .validate_signature_with_kid ({}, jwt , public_keys )
@@ -154,7 +154,7 @@ describe("Plugin: jwt-keycloak (signature validator)", function()
154154 assert .equals (" Invalid token signature" , err .message )
155155 end )
156156
157- it (" should match any key when kid is missing and no alg specified " , function ()
157+ it (" should match key by kty when kid is missing (EC key) " , function ()
158158 local jwt = {
159159 header = { alg = " ES256" },
160160 verify_signature = function (self , key )
@@ -166,8 +166,8 @@ describe("Plugin: jwt-keycloak (signature validator)", function()
166166 keys = { " RSA_KEY" , " EC_KEY" },
167167 kids = { " kid1" , " kid2" },
168168 key_metadata = {
169- {},
170- {}
169+ { kty = " RSA " },
170+ { kty = " EC " }
171171 }
172172 }
173173
@@ -188,8 +188,8 @@ describe("Plugin: jwt-keycloak (signature validator)", function()
188188 keys = { " ENC_KEY" , " SIG_KEY" },
189189 kids = { " kid1" , " kid2" },
190190 key_metadata = {
191- { alg = " RS256" , use = " enc" },
192- { alg = " RS256" , use = " sig" }
191+ { alg = " RS256" , use = " enc" , kty = " RSA " },
192+ { alg = " RS256" , use = " sig" , kty = " RSA " }
193193 }
194194 }
195195
@@ -198,7 +198,7 @@ describe("Plugin: jwt-keycloak (signature validator)", function()
198198 assert .is_nil (err )
199199 end )
200200
201- it (" should match when metadata has no alg specified " , function ()
201+ it (" should match when metadata has no alg but kty matches " , function ()
202202 local jwt = {
203203 header = { alg = " RS256" },
204204 verify_signature = function (self , key )
@@ -210,7 +210,7 @@ describe("Plugin: jwt-keycloak (signature validator)", function()
210210 keys = { " RSA_KEY" },
211211 kids = { " kid1" },
212212 key_metadata = {
213- {} -- no alg specified
213+ { kty = " RSA " } -- no alg specified
214214 }
215215 }
216216
@@ -231,7 +231,7 @@ describe("Plugin: jwt-keycloak (signature validator)", function()
231231 keys = { " KEY_FOR_RS256" },
232232 kids = { " kid1" },
233233 key_metadata = {
234- { alg = " RS256" , use = " sig" }
234+ { alg = " RS256" , use = " sig" , kty = " RSA " }
235235 }
236236 }
237237
@@ -276,4 +276,26 @@ describe("Plugin: jwt-keycloak (signature validator)", function()
276276 assert .equals (401 , err .status )
277277 assert .equals (" No public keys available" , err .message )
278278 end )
279+
280+ it (" should support PS256 (RSA-PSS) algorithm matching" , function ()
281+ local jwt = {
282+ header = { alg = " PS256" },
283+ verify_signature = function (self , key )
284+ return key == " RSA_PSS_KEY"
285+ end
286+ }
287+
288+ local public_keys = {
289+ keys = { " RSA_PSS_KEY" },
290+ kids = { " kid1" },
291+ key_metadata = {
292+ { kty = " RSA" }
293+ }
294+ }
295+
296+ local err = signature_validator .validate_signature_with_kid ({}, jwt , public_keys )
297+
298+ assert .is_nil (err )
299+ end )
300+
279301end )
0 commit comments