我想通过Istio在GRPC服务上设置一个auth policy。
当前,可以在常规HTTP服务上添加策略,因为您可以使用Authorization
标头将JWT令牌传递给该服务。我有点迷茫,因为它似乎不是GRPC服务的类似政策(您可以在请求的metadata中包含令牌)。
是否有人能够将身份验证策略添加到由Istio管理的GRPC服务中?
答案 0 :(得分:0)
如果您使用JSON-to-GRPC Gateway作为istio ingress和grpc 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"]