'Validate a Fernet token and returns the payload attributes.
:type token: six.text_type'

def validate_token(self, token):

    serialized_payload = self.unpack(token)
    versioned_payload = msgpack.unpackb(serialized_payload)
    (version, payload) = (versioned_payload[0], versioned_payload[1:])
    for payload_class in PAYLOAD_CLASSES:
        if (version == payload_class.version):
            (user_id, methods, project_id, domain_id, expires_at, audit_ids, trust_id, federated_info, access_token_id) = payload_class.disassemble(payload)
            break
    else:
        raise exception.ValidationError((_('This    is    not    a    recognized    Fernet    payload    version:    %s') % version))
    issued_at = TokenFormatter.creation_time(token)
    issued_at = ks_utils.isotime(at=issued_at, subsecond=True)
    expires_at = timeutils.parse_isotime(expires_at)
    expires_at = ks_utils.isotime(at=expires_at, subsecond=True)
    return (user_id, methods, audit_ids, domain_id, project_id, trust_id, federated_info, access_token_id, issued_at, expires_at)
