Каждый запрос просто делайте с заголвоком
Bearer: b43hb54b64bv46v46v464bmkkm
Сервер прочитает, если нет токена, то 401 и отправить на страницу входа
На входе получаете токен и сохраняете локально в localStorage, потом на каждом запросе к бекенду добавляете этот токен
Такая типовая практика
пишу все сам без фреймворка
А это зря, уже все есть в фреймворках для удобной работы... например в Ангуляре просто в интерцепторе http запросов ловите каждый запрос и добавляете токен, если есть сохраненный в сторадже, могу предположить, что в др фреймворках также все есть