rest - 在 http 请求中设置 grpc 元数据

标签 rest grpc grpc-gateway

我正在尝试使用 grpc-gateway 为现有的 gRPC 服务创建 REST 端点。 gRPC 服务利用在 grpc 调用中传递的“元数据”来进行身份验证。 如何在我的 REST 调用中设置元数据?

我尝试在 header 中传递元数据键值对。但它没有在上下文中设置元数据。

最佳答案

这里的技巧是使用自定义传入 header 匹配器。您可以在源代码或 grpc-gatway 中看到,有一个 WithIncomingHeaderMatcher 将传入的 HTTP header 转换为传递到上下文的元数据(稍后由 gRPC 服务器处理程序使用)。默认情况下,它支持一组所谓的 permanent HTTP headers,它们按原样传递(例如,Authorization header 将在上下文中显示为 Authorization),或者您需要要使用特定前缀 Grpc-Metadata- 作为自定义 header 的前缀,请参阅 its usage here 。在这种情况下,Grpc-Metadata-Your-Name HTTP header 将作为元数据中的 Your-Name 字段出现。

同样,如果这对您来说太成问题并且您无法通过,例如。 X-User-Id 或任何自定义格式的 header 到您的应用中,您需要设置自定义 header 匹配器。我会建议显式处理您的 header ,然后回退到默认 header (如果您随后更新您的依赖项并添加一些新的 permanentHTTPHeader 效果很好:

    func headerMatcher(header string) (string, bool) {
        if header == "X-User-Id" {
            return "x-user-id", true
        }
        return runtime.DefaultHeaderMatcher(header)
    }

希望这对您有所帮助!

关于rest - 在 http 请求中设置 grpc 元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53125710/

相关文章:

rest - phalcon 包含其余模块

java - 尝试将自定义对象转换为 json 时出现 Jersey 异常

android - 如何使具有服务器流连接的Android grpc客户端保持 Activity 状态?

rest - Protobuf Field Mask 可以应用于 grpc only case 吗?

Java RESTful 返回对象内部的对象,将其作为 toString 而不是转换为 JSON

javascript - JSON 到 HTML 从 url

grpc - grpc 客户端和服务端的共享内存

go - 如何在流拦截器中访问请求?

go - 如何在 grpc-gateway 中设置超时?

go - 如何访问代理的 grpc 服务中的请求 header 。 golang 中的 grpc 网关