实现没有不安全服务器凭据的自定义 AuthMetadataProcessor

Implement a custom AuthMetadataProcessor w/o InsecureServerCredentials

本文关键字:自定义 AuthMetadataProcessor 服务器 不安全 实现      更新时间:2023-10-16

嗨,伙计们,我需要在 grpc c++ 中执行此操作:

客户端发送授权:元数据中的持有者令牌

在服务器中,我需要:

在解决请求之前截获或处理该元数据

获取元数据 查找是否存在自动化键/值,并制定我自己的逻辑来验证令牌,如果令牌有效,则继续解决请求,如果令牌无效,则以返回状态(grpc::状态代码::未经身份验证,消息)完成请求;

我已经有了自己的逻辑来验证令牌。

我看到这篇文章: 拦截服务器和客户端中的 gRPC C++调用

我正确答案他创建了一个自定义的身份验证元数据处理器

但我不知道如何使用 grpc::InsecureServerCredentials() 实现或设置自定义 AuthMetadataProcessor 并使用它启动服务器。

我尝试:

void RunServer() {
auto cred = grpc::InsecureServerCredentials();
cred.get()->SetAuthMetadataProcessor(
std::shared_ptr<grpc::AuthMetadataProcessor>(new grpc::MyServiceAuthProcessor(true)));
//server address
std::string server_address("0.0.0.0:8080");
//our PermissionController service
PermissionController permissionController;
// create the server
ServerBuilder builder;
// Listen on the given address without any authentication mechanism.
builder.AddListeningPort(server_address, cred);
// Register "service" as the instance through which we'll communicate with
// clients. In this case it corresponds to an *synchronous* service.
builder.RegisterService(&permissionController);
// Finally assemble the server.
std::unique_ptr<Server> server(builder.BuildAndStart());
std::cout << "Server listening on " << server_address << std::endl;
// Wait for the server to shutdown. Note that some other thread must be
// responsible for shutting down the server for this call to ever return.
server->Wait();
}

但是服务器不启动显示此错误:

E0712

17:02:20.429173000 1 insecure_server_credentials.cc:34]断言失败:0

我想知道它是如何实现它的正确方法。

谢谢。

到目前为止,您不能,grpc::AuthMetadataProcessor不适用于InsecureServerCredentials,这很不幸,因为在 Envoy 挎斗后面运行 gRPC 服务会很好,TLS 可以终止。