Аутентификация на основе пользовательских каналов с помощью gRPC - PullRequest
0 голосов
/ 06 июня 2018

Как я могу выполнить простую аутентификацию канала с помощью gRPC в dotnet?

Я хочу передать только имя клиентского компьютера и имя клиентского сервиса при подключении к каналу, а затем получить их на сервере.однажды, как способ определения, откуда поступает запрос.

Я не хочу передавать их как метаданные при каждом вызове, и я не хочу реализовывать для этого дополнительный метод.Я изучал документацию и пытался реализовать некоторые абстрактные классы, такие как ServerCredentials, но я не понимаю, как это будет сделано, если это вообще возможно из-за некоторых внутренних классов.

Конечно, яне хочу использовать SSL-сертификаты для этого, ни OAuth2.

1 Ответ

0 голосов
/ 07 июня 2018

Аутентификация данных в метаданных

Передача их в метаданные - одно хорошее решение.Взгляните на рюкзак .Ваш заголовок будет сжат, займет всего несколько байтов.

Вы не можете привязать свои данные авторизации к каналу, так как в HTTP / 2 не гарантируется, что тот же канал TCP будет использоваться для последующих вызовов..

Тем не менее, я все еще жду соответствующего примера от команды GRPC java по пользовательской аутентификации на основе метаданных.

Аутентификация на основе потока

Аутентификация на основе потокатакже опция, если вы хотите сохранить данные аутентификации между последующими вызовами одного и того же API.В моей интерпретации это означает, что вы должны передавать данные аутентификации только в начале потока.Затем ваш StreamObserver может сохранить данные аутентификации и использовать их при последующих вызовах onNext().Я использую этот подход, он работает очень хорошо.

Пример

service MyService {
  rpc myFunction(stream MyMessage) returns (stream MyResponse)
}
message MyMessage {
  string user = 1;
  string password = 2;

  int32 myMessageVariable = 3;
}

user / password должен быть установлен только при первом вызове onNext(myMessage) на requestObserever.Это также очень эффективно, потому что в сети поток представлен StreamId, который представляет собой один байт (в зависимости от того, сколько потоков вы открываете одновременно).

...