@@ -26,6 +26,7 @@ const (
2626)
2727
2828type Client struct {
29+ Keyfunc keyfunc.Keyfunc
2930 Options
3031
3132 cacheMu sync.Mutex
@@ -62,7 +63,17 @@ func New(opts Options) (*Client, error) {
6263 return nil , errors .New ("cannot specify refresh token as well as username/password" )
6364 }
6465
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+
6575 return & Client {
76+ Keyfunc : k ,
6677 Options : opts ,
6778 cachedACRClient : make (map [string ]* acrClient ),
6879 }, nil
@@ -266,13 +277,8 @@ func (c *Client) getTokenExpiration(tokenString string) (time.Time, error) {
266277 jwtParser := jwt .NewParser (jwt .WithoutClaimsValidation ())
267278 var token * jwt.Token
268279 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 )
276282 } else {
277283 token , _ , err = jwtParser .ParseUnverified (tokenString , jwt.MapClaims {})
278284 }
0 commit comments