code: func (d *discoveryDoc) signingKeys(c context.Context) (*JSONWebKeySet, error) {
  	fetcher := func() (interface{}, time.Duration, error) {
  		raw := &JSONWebKeySetStruct{}
  		req := internal.Request{
  			Method: "GET",
  			URL:    d.JwksURI,
  			Out:    raw,
  		}
  		if err := req.Do(c); err != nil {
  			return nil, 0, err
  		}
  		keys, err := NewJSONWebKeySet(raw)
  		if err != nil {
  			return nil, 0, err
  		}
  		return keys, time.Hour * 6, nil
  	}
  
  	cached, err := signingKeysCache.LRU(c).GetOrCreate(c, d.JwksURI, fetcher)
  	if err != nil {
  		return nil, err
  	}
  	return cached.(*JSONWebKeySet), nil
  }
docs: // signingKeys returns a JSON Web Key set fetched from the location specified
  // in the discovery document.
  //
  // It fetches them on the first use and then keeps them cached in the process
  // cache for 6h.
  //
  // May return both fatal and transient errors.