package main import ( "fmt" "time" "github.com/google/uuid" "github.com/lestrrat-go/jwx/v2/jwa" "github.com/lestrrat-go/jwx/v2/jwk" "github.com/lestrrat-go/jwx/v2/jwt" ) func GenerateClientAssertion(signingKey jwk.Key, clientID string, audience string) (string, error) { now := time.Now() token, err := jwt.NewBuilder(). Issuer(clientID). Subject(clientID). Audience([]string{audience}). JwtID(uuid.New().String()). IssuedAt(now). Expiration(now.Add(60 * time.Second)). Build() if err != nil { return "", fmt.Errorf("failed to build JWT: %w", err) } signed, err := jwt.Sign(token, jwt.WithKey(jwa.ES256, signingKey)) if err != nil { return "", fmt.Errorf("failed to sign JWT: %w", err) } return string(signed), nil }