Я портирую клиент gRPC с python на c #.И клиент python, и клиент c # используют gRPC Framework из grpc.io.
Клиент python использует следующий код для открытия безопасного канала без проверки подлинности, который затем используется для получения строки токена, который затем используется для создания учетных данных вызова с помощью функции grpc.composite_channel_credentials ():
channel = grpc.secure_channel(url_server_address, ssl_creds)
stub = gateway.GatewayStub(channel)
# Acquire access token via password authentication
pw_cmd = gateway.PasswordAuthenticateCmd(account_name=url.username, password=url.password)
auth_rsp = stub.PasswordAuthenticate(pw_cmd)
# Open a secure, authenticated channel
auth_creds = grpc.access_token_call_credentials(auth_rsp.access_token)
composite_creds = grpc.composite_channel_credentials(ssl_creds, auth_creds)
channel = grpc.secure_channel(url_server_address, composite_creds)
stub = gateway.GatewayStub(channel)
В c # я смог скомпилировать определения буфера протокола и соединиться с сгенерированным клиентом для успешного получениятокен доступа:
SslCredentials secureChannel = new SslCredentials(File.ReadAllText(SSLCertificatePath));
Channel channel = new Channel(ServerURL, PortNum, secureChannel);
var client = new GrpcClient(new Grpc.Gateway.GatewayClient(channel));
var response = client.client.PasswordAuthenticate(new PasswordAuthenticateCmd() { AccountName = UserName, Password = UserPassword });
Console.WriteLine(response.AccessToken);
Однако отсюда я не могу найти аналог c # функции grpc.composite_channel_credentials () для получения SslCredentials и строки токена доступа для создания комбинированных учетных данных.
Ни один из приведенных здесь примеров https://grpc.io/docs/guides/auth.html здесь не использует строку токена, и я не смог найти других примеров.