Sulphate ions do have covalent bonding between the sulphur and oxygen atoms: two of the four oxygens form double bonds with the central sulphur atom and the remaining two form single bonds with the central sulphur atom. Sulphur is weird, as it can form ‘hypervalent’ compounds (i.e the octet expands and it can have more than 8 electrons in its outer shell) for reasons you don’t really need to understand unless you study chemistry beyond A level. The sulphur in the sulphate ion is therefore considered to be in a hypervalent state.
The two oxygens that form single bonds with the central sulphur need to form a stable octet to stabilise. Because they have their 6 outer electrons and are sharing an electron from the sulphur atom, they would have 7 outer electrons rather than the usual 8 if no extra electrons are added. Thus they must each gain 1 electron from either a hydrogen or metal atom in order to attain the full octet. Thus, there is ionic bonding between the metal/hydrogen and the sulphate ion.