grpc服务认证实现方式

gRPC服务认证有几种实现思路

  • gRPC通信层使用SSL/TLS认证
  • gRPC服务提供的接口中认证
  • 使用注册中心的认证

通信层基于SSL/TLS认证方式

参考这里:
https://segmentfault.com/a/1190000007933303
大致思路是,gRPC通信层使用证书:
服务端创建服务增加参数

creds, err := credentials.NewServerTLSFromFile("../../keys/server.pem", "../../keys/server.key")
s := grpc.NewServer(grpc.Creds(creds))

客户端链接增加参数

creds, err := credentials.NewClientTLSFromFile("../../keys/server.pem", "server name")
conn, err := grpc.Dial(Address, grpc.WithTransportCredentials(creds))

支持自定义验证token方式。
需要定义一个结构,实现grpc/credential包内的PerRPCCredentials接口,就可以提供给grpc当成grpc.DialOption使用。
开发者可以通过实现GetRequestMetadata和RequireTransportSecurity两个方法来完成自定义验证,类似appid+appkey+签名的方式。

gRPC服务接口中认证

  • 用参数验证 appid+appkey
  • 使用http header验证

需要自行实现。

使用注册中心的认证

etcd注册中心支持SSL客户端证书认证

etcd支持HTTP RESTful 接口,可以通过配置让etcd支持https。
参考:http://www.jianshu.com/p/1043903bc359

etcd注册中心支持HTTP Authorization Header方式认证

具体可以参考官方文档:
鉴权认证api: https://github.com/coreos/etcd/blob/6acb3d67fbe131b3b2d5d010e00ec80182be4628/Documentation/v2/auth_api.md

你可能感兴趣的:(grpc)