...
1 package keyfunc
2
3 import (
4 "encoding/base64"
5 "errors"
6 "fmt"
7 "strings"
8
9 "github.com/golang-jwt/jwt/v4"
10 )
11
12 var (
13
14 ErrKID = errors.New("the JWT has an invalid kid")
15 )
16
17
18 func (j *JWKS) Keyfunc(token *jwt.Token) (interface{}, error) {
19 kidInter, ok := token.Header["kid"]
20 if !ok {
21 return nil, fmt.Errorf("%w: could not find kid in JWT header", ErrKID)
22 }
23 kid, ok := kidInter.(string)
24 if !ok {
25 return nil, fmt.Errorf("%w: could not convert kid in JWT header to string", ErrKID)
26 }
27
28 return j.getKey(kid)
29 }
30
31
32
33
34
35
36
37
38 func base64urlTrailingPadding(s string) ([]byte, error) {
39 s = strings.TrimRight(s, "=")
40 return base64.RawURLEncoding.DecodeString(s)
41 }
42
View as plain text