Аутентификация HMAC лучше обслуживать для API, к которому будут подключаться третьи стороны.Похоже, что ваше приложение будет лучше обслуживаться, если в браузере клиента будет сохранен файл cookie, указывающий, что они прошли проверку подлинности.Затем с каждым запросом ajax вы можете проверить наличие этого cookie.
Редактировать: Я возвращаюсь к тому, что я сказал о том, что HMAC лучше обслуживается сторонними API.Традиционно с HMAC каждый пользователь получает свой собственный закрытый ключ.Я не думаю, что это необходимо для вашего приложения.Возможно, вам не удастся просто сохранить один главный закрытый ключ и дать каждому пользователю уникальный «открытый» ключ (я называю его открытым ключом, но на самом деле пользователь никогда не узнает о ключе).Когда пользователь входит в систему, я бы написал два куки.Один, который представляет собой комбинацию открытого ключа пользователя + зашифрованной метки времени, и другой ключ, указывающий, что такое метка времени.Затем на стороне сервера вы можете проверить зашифрованный ключ и проверить, что отметка времени находится в пределах заданного порога (скажем, 10-30 минут, если они бездействуют в вашем приложении).Если они проверены, обновите зашифрованный ключ и отметку времени, промойте и повторите.