func (s *Session) Token() (*oauth2.Token, error) {
	var (
		err      error
		expireAt time.Time
	)
	if s.ExpireAt != nil {
		expireAt, err = ptypes.Timestamp(s.ExpireAt)
		if err != nil {
			return nil, err
		}
	}
	token := &oauth2.Token{
		AccessToken: string(s.AccessToken),
		Expiry:      expireAt,
	}
	if s.Bag != nil && len(s.Bag) > 0 {
		token = token.WithExtra(bagToURLValues(s.Bag))
	}

	return token, nil
}
func (s *Session) Token() (*oauth2.Token, error) {
	var (
		err      error
		expireAt time.Time
	)
	if s.ExpireAt != nil {
		expireAt, err = ptypes.Timestamp(s.ExpireAt)
		if err != nil {
			return nil, err
		}
	}
	token := &oauth2.Token{
		AccessToken: string(s.AccessToken),
		Expiry:      expireAt,
	}
	if s.Bag != nil && len(s.Bag) > 0 {
		token = token.WithExtra(bagToURLValues(s.Bag))
	}

	return token, nil
}
// Token implements oauth2.TokenSource interface.