简体   繁体   English

NestJS - grpc 微服务中的元数据

[英]NestJS - Metadata in grpc microservice

I am looking for a way to authorize an rpc via NestJS grpc microservices.我正在寻找一种通过 NestJS grpc 微服务授权 rpc 的方法。 Basically I want to attach a token in the grpc client, which has to be validated by the grpc server.基本上我想在 grpc 客户端中附加一个令牌,该令牌必须由 grpc 服务器验证。 I found this issue , but I did not get where exactly grpc.Metadata pass as a second argument.我发现了这个问题,但我没有得到grpc.Metadata作为第二个参数传递的确切grpc.Metadata

I found a way to solve this.我找到了解决这个问题的方法。 For sure not the most elegant solution, but it works for now.当然不是最优雅的解决方案,但它现在有效。 A simplified example:一个简化的例子:

// gRPC client
@Get(':id')
async call(@Param() params) {
    const metadata = new grpc.Metadata();
    // add relevant data to the metadata object (e.g from request header)
    metadata.add('role', 'admin');
    return this.userService.findOne({ id: +params.id}, metadata);
}

// Service
interface UserService {
    findOne(data: {id: number}, metadata: grpc.Metadata): Observable<any>;
}

// gRPC server
@GrpcMethod('UserService', 'FindOne')
async findOne(data: UserById, metadata: grpc.Metadata) {
    const meta = metadata.getMap();
    // do something with the metadata...
    console.log(meta.role);
    const items: User= [
        { id: 1, name: 'User 1' },
        { id: 2, name: 'User 2' },
        { id: 3, name: 'User 3' },
    ];
    return items.find(({ id }) => id === data.id);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM