Аутентификация данных в метаданных
Передача их в метаданные - одно хорошее решение.Взгляните на рюкзак .Ваш заголовок будет сжат, займет всего несколько байтов.
Вы не можете привязать свои данные авторизации к каналу, так как в 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, который представляет собой один байт (в зависимости от того, сколько потоков вы открываете одновременно).