func NewAudience(name string, secretFunc GenerateSecretString) (*Audience, error) {
	audience := NewAudienceNotStore(name, secretFunc)
	if err := Store.SaveAudience(audience); err != nil {
		return nil, err
	} else {
		return audience, nil
	}
}
New audience and this audience will be saved to store.
package tokenauth
import (
	"errors"
	"time"
)
var TokenPeriod uint64 = 7200  
var Store TokenStore
func ChangeTokenStore(newStore TokenStore) error {
	if newStore == nil {
		return errors.New("tokenauth: new store is nil.")
	}
	if Store != nil {
		if err := Store.Close(); err != nil {
			return err
		}
	}
	Store = newStore
	return nil
}
func UseDeaultStore() error {
	s, err := NewStore("default", `{"path":"./data/tokendb.bolt"}`)
	if err != nil {
		return err
	}
	return ChangeTokenStore(s)
}
type GenerateSecretString func(clientID string) (secretString string)  
type GenerateTokenString func(audience *Audience) string  