func NewAccessTokenParam(enable bool, verifyCertThumbprint bool, certBackdateDur, certOffsetDur string, verifyClientID bool, authorizedClientIDs map[string][]string) AccessTokenParam {
	return AccessTokenParam{
		enable: enable,
		verifyCertThumbprint: verifyCertThumbprint,
		certBackdateDur: certBackdateDur,
		certOffsetDur: certOffsetDur,
		verifyClientID: verifyClientID,
		authorizedClientIDs: authorizedClientIDs,
	}
}
/*
access token parameters

NewAccessTokenParam returns a new access token parameter
package authorizerd
import (
	"net/http"
	"time"
	urlutil "github.com/yahoojapan/athenz-authorizer/v5/internal/url"
)
const (
	defaultHTTPClientTimeout = 30
)
var (
	defaultOptions = []Option{
		WithAthenzURL("athenz.io/zts/v1"),
		WithHTTPClient(nil),
		WithCacheExp(time.Minute),
		WithEnablePubkeyd(),
		WithEnablePolicyd(),
		WithEnableJwkd(),
		WithAccessTokenParam(NewAccessTokenParam(true, true, "1h", "1h", false, nil)),
		WithEnableRoleToken(),
		WithRoleAuthHeader("Athenz-Role-Auth"),
		WithEnableRoleCert(),
		WithRoleCertURIPrefix("athenz://role/"),
	}
)
type AccessTokenParam struct {
	enable               bool
	verifyCertThumbprint bool
	certBackdateDur      string
	certOffsetDur        string
	verifyClientID       bool
	authorizedClientIDs  map[string][]string
}
type Option func(*authority) error
func WithAthenzURL(url string) Option {
	return func(authz *authority) error {
		u := urlutil.TrimHTTPScheme(url)
		if urlutil.HasScheme(u) {
			return urlutil.ErrUnsupportedScheme
		}
		authz.athenzURL = u
		return nil
	}
}
func WithAthenzDomains(domains ...string) Option {
	return func(authz *authority) error {
		authz.athenzDomains = domains
		return nil
	}
}
func WithHTTPClient(c *http.Client) Option {
	return func(authz *authority) error {
		if c == nil {
			authz.client = &http.Client{
				Timeout: defaultHTTPClientTimeout * time.Second,
			}
			return nil
		}
		authz.client = c
		return nil
	}
}
func WithCacheExp(exp time.Duration) Option {
	return func(authz *authority) error {
		authz.cache.SetDefaultExpire(exp)
		authz.cacheExp = exp
		return nil
	}
}
func WithEnablePubkeyd() Option {
	return func(authz *authority) error {
		authz.disablePubkeyd = false
		return nil
	}
}
func WithDisablePubkeyd() Option {
	return func(authz *authority) error {
		authz.disablePubkeyd = true
		return nil
	}
}
func WithPubkeyRefreshPeriod(t string) Option {
	return func(authz *authority) error {
		authz.pubkeyRefreshPeriod = t
		return nil
	}
}
func WithPubkeyRetryDelay(i string) Option {
	return func(authz *authority) error {
		authz.pubkeyRetryDelay = i
		return nil
	}
}
func WithPubkeySysAuthDomain(domain string) Option {
	return func(authz *authority) error {
		authz.pubkeySysAuthDomain = domain
		return nil
	}
}
func WithPubkeyETagExpiry(t string) Option {
	return func(authz *authority) error {
		authz.pubkeyETagExpiry = t
		return nil
	}
}
func WithPubkeyETagPurgePeriod(t string) Option {
	return func(authz *authority) error {
		authz.pubkeyETagPurgePeriod = t
		return nil
	}
}
func WithEnablePolicyd() Option {
	return func(authz *authority) error {
		authz.disablePolicyd = false
		return nil
	}
}
func WithDisablePolicyd() Option {
	return func(authz *authority) error {
		authz.disablePolicyd = true
		return nil
	}
}
func WithPolicyRefreshPeriod(t string) Option {
	return func(authz *authority) error {
		authz.policyRefreshPeriod = t
		return nil
	}
}
func WithPolicyExpiryMargin(t string) Option {
	return func(authz *authority) error {
		authz.policyExpiryMargin = t
		return nil
	}
}
func WithPolicyPurgePeriod(t string) Option {
	return func(authz *authority) error {
		authz.policyPurgePeriod = t
		return nil
	}
}
func WithPolicyRetryDelay(i string) Option {
	return func(authz *authority) error {
		authz.policyRetryDelay = i
		return nil
	}
}
func WithPolicyRetryAttempts(c int) Option {
	return func(authz *authority) error {
		authz.policyRetryAttempts = c
		return nil
	}
}
func WithEnableJwkd() Option {
	return func(authz *authority) error {
		authz.disableJwkd = false
		return nil
	}
}
func WithDisableJwkd() Option {
	return func(authz *authority) error {
		authz.disableJwkd = true
		return nil
	}
}
func WithJwkRefreshPeriod(t string) Option {
	return func(authz *authority) error {
		authz.jwkRefreshPeriod = t
		return nil
	}
}
func WithJwkRetryDelay(i string) Option {
	return func(authz *authority) error {
		authz.jwkRetryDelay = i
		return nil
	}
}
func WithJwkURLs(urls []string) Option {
	return func(authz *authority) error {
		authz.jwkURLs = urls
		return nil
	}
}