@@ -26,6 +26,7 @@ const (
26
26
)
27
27
28
28
type Client struct {
29
+ Keyfunc keyfunc.Keyfunc
29
30
Options
30
31
31
32
cacheMu sync.Mutex
@@ -62,7 +63,17 @@ func New(opts Options) (*Client, error) {
62
63
return nil , errors .New ("cannot specify refresh token as well as username/password" )
63
64
}
64
65
66
+ var k keyfunc.Keyfunc
67
+ var err error
68
+ if opts .JWKSURI != "" {
69
+ k , err = keyfunc .NewDefaultCtx (context .TODO (), []string {opts .JWKSURI })
70
+ if err != nil {
71
+ return nil , fmt .Errorf ("failed to create keyfunc: %w" , err )
72
+ }
73
+ }
74
+
65
75
return & Client {
76
+ Keyfunc : k ,
66
77
Options : opts ,
67
78
cachedACRClient : make (map [string ]* acrClient ),
68
79
}, nil
@@ -266,13 +277,8 @@ func (c *Client) getTokenExpiration(tokenString string) (time.Time, error) {
266
277
jwtParser := jwt .NewParser (jwt .WithoutClaimsValidation ())
267
278
var token * jwt.Token
268
279
var err error
269
- if c .JWKSURI != "" {
270
- var k keyfunc.Keyfunc
271
- k , err = keyfunc .NewDefaultCtx (context .TODO (), []string {c .JWKSURI })
272
- if err != nil {
273
- return time.Time {}, err
274
- }
275
- token , err = jwtParser .Parse (tokenString , k .Keyfunc )
280
+ if c .Keyfunc != nil {
281
+ token , err = jwtParser .Parse (tokenString , c .Keyfunc .Keyfunc )
276
282
} else {
277
283
token , _ , err = jwtParser .ParseUnverified (tokenString , jwt.MapClaims {})
278
284
}
0 commit comments