package providers import ( "context" "errors" "framework_v2/internal/consts" "github.com/MicahParks/keyfunc/v3" "github.com/golang-jwt/jwt/v5" "time" ) var refreshRate = 1 * time.Hour var Jwks keyfunc.Keyfunc var ( ErrJWKSNotInitialized = errors.New("JWKS is not initialized") ) func InitJwksRefresh() { // 启动一个定时器 go func() { for { RefreshJWKS() time.Sleep(refreshRate) } }() } func RefreshJWKS() { Logger.Info("Refreshing JWKS...") var err error Jwks, err = keyfunc.NewDefault([]string{Config.JWKS.Url}) if err != nil { Logger.Error("Failed to create JWK Set from resource at the given URL.\nError: " + err.Error()) } Logger.Info("JWKS refreshed.") } func ParseJWT(jwtB64 string) (*jwt.Token, error) { //if Jwks.Keyfunc == nil { // Logger.Error(ErrJWKSNotInitialized.Error()) // return nil, ErrJWKSNotInitialized //} token, err := jwt.Parse(jwtB64, Jwks.Keyfunc) return token, err } func GetAuthFromCtx(ctx context.Context) *consts.UserTokenInfo { auth := ctx.Value("auth") if auth == nil { return nil } return auth.(*consts.UserTokenInfo) }