在GRPC服务上使用JWT进行Istio最终用户身份验证

时间:2018-08-27 11:21:38

标签: kubernetes jwt grpc istio envoyproxy

我想通过Istio在GRPC服务上设置一个auth policy

当前,可以在常规HTTP服务上添加策略,因为您可以使用Authorization标头将JWT令牌传递给该服务。我有点迷茫,因为它似乎不是GRPC服务的类似政策(您可以在请求的metadata中包含令牌)。

是否有人能够将身份验证策略添加到由Istio管理的GRPC服务中?

1 个答案:

答案 0 :(得分:0)

如果您使用JSON-to-GRPC Gateway作为istio ingressgrpc service之间的中间件,则可以为您实现Authorization解析为md['authorization']的标头。

JSON-to-GRPC Gateway source-code line,其中HTTP Header Authorization被解析并附加到将成为元数据的

for key, vals := range req.Header {
    for _, val := range vals {
        if key == "Authorization" {
            pairs = append(pairs, "authorization", val)
            continue
        }

PS ::如果可以在 istio 本身中使用自定义中间件功能,则可以复制grpc-gateway逻辑以实现相同的行为。

以后可以通过context grpc-service 中访问的

,如下所示:

// retrieve metadata from context
md, ok := metadata.FromContext(ctx)

md["authorization"]