如何使用用户名/密码作为nodejs grpc的凭证?



我正在尝试访问Arista路由器上的gNMI API。日志含义接口只配置了用户名/密码(admin/admin),没有配置证书。

这个CLI命令返回能力

$ gnmic -a 10.72.47.100:32232 --username admin --password admin --skip-verify capabilities

我使用@grpc/grpc-jsts-proto来生成typescript模型。
我还没能弄清楚如何从node/typescript中进行相同的API调用。

尝试将不安全凭证与呼叫凭证结合使用会产生此错误Error: Cannot compose insecure credentials


import * as grpc from '@grpc/grpc-js';
import * as gnmi from './proto/github.com/openconfig/gnmi/proto/gnmi/gnmi';

const meta = new grpc.Metadata();
meta.add('username', 'admin');
meta.add('password', 'admin');
const channelCredentials = grpc.credentials.createInsecure();
const callCredentials = grpc.credentials.createFromMetadataGenerator( (options, callback) => {
callback(null, meta);
});
const credentials = grpc.credentials.combineChannelCredentials(
channelCredentials,
// callCredentials, <-- ** gives error: Error: Cannot compose insecure credentials **
);
const client = new gnmi.gNMIClient('10.72.47.100:32232', credentials);
const req: gnmi.CapabilityRequest = { extension: [] };
client.capabilities(req,
(error, response) => {
if (error) {
console.error(error);
process.exit(1);
}
console.info(response.gNMIVersion);
})

并且将元传递给调用会给我这个错误Error: 14 UNAVAILABLE: Connection dropped。我认为这是由于缺少凭据

const meta = new grpc.Metadata();
meta.add('username', 'admin');
meta.add('password', 'admin');
const Credentials = grpc.credentials.createInsecure();
const client = new gnmi.gNMIClient('10.72.47.100:32232', credentials);
const req: gnmi.CapabilityRequest = { extension: [] };
client.capabilities(req, meta
(error, response) => {
if (error) {
console.error(error);
process.exit(1);
}
console.info(response.gNMIVersion);
})
code: 14, details: 'Connection dropped',
metadata: Metadata, stack: 'Error: 14 UNAVAILABLE: Connection dropped

有什么建议吗?

感谢

gRPC不允许组合叫凭证与不安全通道凭证,因为叫凭证通常包含敏感信息,只能通过安全连接传输。处理此问题的最简单方法是通过在客户机和服务器上使用安全凭据来使用TLS保护连接。如果这不是一个选项,您也可以将元数据直接传递给每个单独的请求,而不是使用调用凭据。

最新更新