JWT подписывается через библиотеку golang-jwt/jwt. Создаёшь claims (payload с данными пользователя и exp), создаёшь токен через jwt.NewWithClaims(jwt.SigningMethodHS256, claims), подписываешь через token.SignedString(secretKey). Для верификации — jwt.Parse(tokenString, keyFunc) где keyFunc возвращает секретный ключ. HS256 использует симметричный ключ (HMAC), RS256 — асимметричную пару (приватный для подписи, публичный для проверки). В проде обычно access token живёт 15 минут, refresh token — дни или недели.