ну я делал самописную авторизацию на голом php, пароли я не хранил в открытом ввиде
Давай в кратце. Есть контент. Ты его отправил на фронт и не можешь быть уверен, что вернётся тот же и его клиент не изменит.
Логику и детальное описание можешь нагуглить, но суть в чём.
Ты берёшь свой ключ, секрет и т.д. Генеришь контент, подписываешь его (!) и отправляешь на клиент. Клиент обязан отправить тебе тот же контент вместе с подписью или ты не будешь это котировать.
Естественно, клиент не сможет подделать подпись. В рамках структуры JWT, в нём сразу хранится и контент (например uuid пользователя) и сама подпись