Basic client-side auth framework