jwt / ruby-jwt

A ruby implementation of the RFC 7519 OAuth JSON Web Token (JWT) standard.
http://ruby-jwt.org
MIT License
3.6k stars 377 forks source link

Resolving algorithms from JWK when not explicitly specified #400

Open MatteoPierro opened 3 years ago

MatteoPierro commented 3 years ago

Currently, JWT.decode always expects to have the algorithms provided by the client. When using JWKs this information can be redundant since supported algorithms can be resolved from the provided keys.

This kind of resolve will be triggered only if the client is not explicitly specifying the algorithms (the current behavior).

Do you see any security issues resolving the algorithm from the JWK?

herkusas commented 4 months ago

@anakinj Would it be possible to implement this?

I can't find a good reason why not to.

People are having issues when they are verifying some tokens from a third party and then the third party suddenly changes the algorithm they use, for example, they are moving from the RS256 algorithm to the PS256 (If the third party wants to comply with financial grade API then they should use ES256 or PS256. And if they switch from RS256 -> KABOOM! Nothing works).

image

I agree that allowed algorithms are nice, but it's not always needed, if you trust the key from JWKS, you should trust the algorithm as well.

There are ways to iterate through JWKS and provide algorithms of the keys it holds, but why?