Поскольку собеседование носило вид забега по саванне
, то некоторые пост-заметки тут.
Генерируеться не только сериализатор/десериализатор. При его использовании действительно генерируется объемные клиент-серверный код, который “добавляется” к основному шасси.
Это несколько затрудняет отладку, как в любом случае с генерацией кода.
К которому можно прикрутить свою аутентификацию и авторизацию. Для примера сделал:
Но gRPC используют где нужно и не нужно, хотя тот JSON RPC 2.0 и варианты реализовываеться на раз, и даже с валидацией запроса при желании. И включая через web-socket как транспорт (в примере сделал на базе gorilla libs)
И на том же на perl, как пример реализации на разном
Так что да, не панацея.
RPC можно организовать хоть почтовыми голубями. Вопрос в соглашении об интерпретации и дисциплине. “Красные барабаны это сигнал правым полкам наcтупать”
В проекте ниже RPC реализован через старые как мир GET/POST. Помним, что этот продуктик работает 5 лет без остановки, и каждые сутки по расписанию прогоняет через себя 2Тб дампов с 30 узлов.
Кстати, почему Perl?
В моем последнем протокольном фрейворке https://pkg.go.dev/github.com/kindsoldier/dsrpc действительно реализована “порядочная” аутентификация. В открытом виде передается только авторизационный ключ. Дайджест каждый раз другой.
Псевдокод
===client side=== struct { login pass } salt = hash(random) digest = hash(salt + password) send(login, salt, digest) ===server side=== struct { login pass } req_login, req_salt, req_digest = receive() digest = hash(req_salt + password) if digest == req_digest { auth = true } else { auth = false }
Подобная логика применяется в очень и очень многих сетевых приложениях. Она достаточно устойчива, посольку не позволяет вычислить пароль по дайджесту. Для скрытия авторизационного ключа применяется шифрование разделяемым ключем, но тут это изыточно.
Вставить в начало протокольного диалога обработку magic code. Если первые байты из сокета не соотвествуют шаблону, то закрываем сокет на сервере по ошибке декодирования заголовка. Полностью не спасает (нужен комплекс мер), но позволяет при “атаке” снизить нагрузку на сервис на порядок и более.
Код какой-то из промежуточных версий. JWT AA для Gin на базе хорошей крипто-библиотеки от немецкого коллеги. Легко переделать для других целей.
Код с фронта c JWT в два конца сейчас не найду.