【问题标题】:NestJS - Metadata in grpc microserviceNestJS - grpc 微服务中的元数据
【发布时间】:2019-01-09 14:27:02
【问题描述】:

我正在寻找一种通过 NestJS grpc 微服务授权 rpc 的方法。基本上我想在 grpc 客户端中附加一个令牌,该令牌必须由 grpc 服务器验证。我找到了this issue,但我没有得到grpc.Metadata 作为第二个参数传递的确切位置。

【问题讨论】:

标签: node.js grpc nestjs


【解决方案1】:

我找到了解决这个问题的方法。肯定不是最优雅的解决方案,但它现在有效。一个简化的例子:

// 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);
}

【讨论】:

  • 感谢发帖,但我认为这对授权很有好处。建立连接时应进行身份验证。
  • 是的,你是对的!谢谢你指出。我想解决授权问题。我感到困惑并使用了错误的词 - 对不起!
  • 我认为身份验证只能在连接流时完成。对于 RPC,您的解决方案是唯一的解决方案,因为在 http/2 中,初始连接不能保证与 websockets 相同。 stackoverflow.com/questions/50725167/….
猜你喜欢
  • 2020-05-29
  • 2022-11-25
  • 1970-01-01
  • 2020-10-10
  • 2021-01-12
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 2020-10-29
相关资源
最近更新 更多