классический подход вместе с запросом отдавать данные которые однозначно идентифицируют пользователя (логин пароль с каждым запросом не передают, тк это потенциальная возможность подслушать эти данные, ну и проблема с производительностью, придется на каждый запрос сверяться с базой данных пользователей, что очень накладно)
обычно для идентификации пользователя сервис при входе создает специальный "ключ" (который пользователь хранит у себя и передает в сервис при каждом запросе).
раньше для этих целей активно использовали сессии, которые сервер хранил у себя в памяти и сверял введенные данные с этими сессиями - но там множество проблем с маштабируемость и производительность, поэтому сейчас активно используют так называемые "токены"
в таком токене зашифровано хранятся данные о пользователе, при получении токена сервер расшифровывает находящиеся там данных, ни с чем их у себя не сверяет и НЕ ХРАНИТ, в этих расшифрованных данных конкретно указывается есть ли у пользователя права доступа или нет.
токены эти могут передаваться на сервер в запросе в качестве параметра:
хттп://сайт.ру/данные.жсон?токен=ваш_токен
но такой способ считается плохим тк токены остаются в истории браузера например (ну и гет запросы обрезают длинну возможной ссылки)
наиболее подходящим способом считается передача токенов в заголовке запроса
подробнее о токенах советую посмотреть тут:
https://jwt.io/introduction/