Добавление контроля доступа в Protobuf

Я думал о добавлении какого-то контроля доступа на основе возможностей к сервисам grpc. Моя идея состояла в том, чтобы иметь обязательную возможность для каждого rpc, определенного в файле proto, и использовать перехватчики grpc, чтобы проверить, соответствует ли предоставленная пользователем возможность той, которая требуется для rpc. Я просмотрел несколько документов и учебных пособий, но я немного растерялся относительно того, с чего начать. Буду признателен за любые рекомендации.

1 ответ

Решение

Одним из способов достижения этой цели является написание модуля генератора, который будет анализировать ваш файл прото и генерировать некоторый код или файл данных. Как это делает grpc-gateway. Каждый RPC имеет параметры, которые можно настроить, и добавить в файл протора, как это. Эти параметры называются protobuf.MethodOptions. Вы можете увидеть это здесь. Таким образом, вы можете иметь свои собственные параметры метода и сгенерировать свой валидатор или модификатор, используя его, а затем вызвать валидатор из перехватчика для разрешения.

Еще один нетрадиционный способ, которым я могу вам сказать, это то, что у вас может быть файл json или yaml, включая карту. Каждый метод protobuf имеет уникальный идентификатор имени, форматированный как "/package.service/rpcMethodName", так что если у вас есть метод RPC, как:

syntax = "proto3";

package yourpackage;

service ServiceName {
  rpc MethodName(Request) returns (Response) {};
}

уникальный идентификатор для этого метода будет выглядеть как /yourpackage.ServiceName/MethodName что вы найдете внутри вашего перехватчика, как grpc.UnaryServerInfo.FullMethod,

Таким образом, вы поддерживаете отдельную карту через yaml или json, которая содержит ваше FullMethodName и требуемую возможность, затем внутри вашего перехватчика прочитайте карту и найдите нужную возможность для вашего метода и примените нужные операции.

Другие вопросы по тегам