in pkg/filter/auth/jwt/jwt.go [143:196]
func (factory *FilterFactory) Apply() error {
if len(factory.cfg.Providers) == 0 {
return fmt.Errorf("providers is null")
}
for _, provider := range factory.cfg.Providers {
if provider.Local != nil {
jwksJSON := json.RawMessage(provider.Local.InlineString)
jwks, err := keyfunc.NewJSON(jwksJSON)
if err != nil {
logger.Warnf("failed to create JWKs from JSON. provider:%s Error: %s", provider.Name, err.Error())
} else {
provider.FromHeaders.setDefault()
factory.providerJwks[provider.Name] = Provider{jwk: jwks, headers: provider.FromHeaders,
issuer: provider.Issuer, forwardPayloadHeader: provider.ForwardPayloadHeader}
continue
}
}
if provider.Remote != nil {
uri := provider.Remote.HttpURI
timeout, err := time.ParseDuration(uri.TimeOut)
if err != nil {
logger.Warnf("jwt provides timeout parse fail: %s", err.Error())
continue
}
options := keyfunc.Options{RefreshTimeout: timeout}
jwks, err := keyfunc.Get(uri.Uri, options)
if err != nil {
logger.Warnf("failed to create JWKs from resource at the given URL. provider:%s Error: %s", provider.Name, err.Error())
} else {
provider.FromHeaders.setDefault()
factory.providerJwks[provider.Name] = Provider{jwk: jwks, headers: provider.FromHeaders,
issuer: provider.Issuer, forwardPayloadHeader: provider.ForwardPayloadHeader}
}
}
}
if len(factory.providerJwks) == 0 {
return fmt.Errorf("providers is null")
}
if factory.cfg.ErrMsg == "" {
factory.cfg.ErrMsg = "token invalid"
}
errMsg, _ := json.Marshal(http.ErrResponse{Message: factory.cfg.ErrMsg})
factory.errMsg = errMsg
return nil
}