-
Notifications
You must be signed in to change notification settings - Fork 404
Closed
Description
The ExampleParse_hmac
function in hmac_example_test.go
provides the following example code:
Lines 51 to 59 in bc8bdca
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { | |
// Don't forget to validate the alg is what you expect: | |
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { | |
return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) | |
} | |
// hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key") | |
return hmacSampleSecret, nil | |
}) |
The validation performed on line 53 seems at odds with the recommendations in the Parse
function docs:
Lines 218 to 225 in bc8bdca
// Parse parses, validates, verifies the signature and returns the parsed token. | |
// keyFunc will receive the parsed token and should return the cryptographic key | |
// for verifying the signature. The caller is strongly encouraged to set the | |
// WithValidMethods option to validate the 'alg' claim in the token matches the | |
// expected algorithm. For more details about the importance of validating the | |
// 'alg' claim, see | |
// https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/ | |
func Parse(tokenString string, keyFunc Keyfunc, options ...ParserOption) (*Token, error) { |
In this case, the type assertion tests whether token.Method
can be safely converted to the *jwt.SigningMethodHMAC
type. But a more specific check for HS256 seems more appropriate.
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
// hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key")
return hmacSampleSecret, nil
}, jwt.WithValidMethods([]string{jwt.SigningMethodHS256.Alg()}))
Or for all HMAC signing methods:
validMethods := []string{
jwt.SigningMethodHS256.Alg(),
jwt.SigningMethodHS384.Alg(),
jwt.SigningMethodHS512.Alg(),
}
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
// hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key")
return hmacSampleSecret, nil
}, jwt.WithValidMethods(validMethods))
stefansaasen
Metadata
Metadata
Assignees
Labels
No labels