1 回答

TA贡献1891条经验 获得超3个赞
在 gRPC 中间件中使用转码和检查身份验证对于使用gRPC 网关的gRPC 上的 http 服务器更好。
https://cloud.google.com/endpoints/docs/grpc/transcoding
要在标头中获得授权,请使用 gRPC 中间件并使用 gRPC MD 从上下文中获取。
srv := grpc.NewServer(exampleJwtMiddleware())
func exampleJwtMiddleware() grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
token, err := extractHeaderFromContext(ctx, "Authorization")
// do sometings...
return handler(ctx, req)
}
}
func extractHeaderFromContext(ctx context.Context, header string) ([]string, error) {
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return nil, ERROR_NO_HEADER_IN_REQUEST
}
foundedHeaders, ok := md[header]
if !ok {
return nil, ERROR_NO_HEADER_IN_REQUEST
}
return foundedHeaders, nil
}
- 1 回答
- 0 关注
- 243 浏览
添加回答
举报