为了账号安全,请及时绑定邮箱和手机立即绑定

使用 unix socket 访问 GRPC 服务器中的底层连接

使用 unix socket 访问 GRPC 服务器中的底层连接

Go
一只甜甜圈 2022-10-17 16:42:28
想知道是否有一种方法可以访问底层 net.Conn 以使用 SO_PEERCRED 检索用户凭据并在服务器处理请求之前对其进行验证。从https://blog.jbowen.dev/2019/09/using-so_peercred-in-go/,需要 net.UnixConn 返回用于验证的 unix.Ucred。因此,如果服务器请求处理程序有某种方法可以访问 net.Conn,这应该很容易我查看了 UnaryServerInterceptor,但 UnaryServerInterceptor 中提供的任何内容似乎都没有包含 net.Connfunc interceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {    log.Printf("Intercepted: %+v %+v", info.Server, req) // anything here?    return handler(ctx, req)}
查看完整描述

1 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

接口方法TransportCredentials.ServerHandshake是您需要的接缝。您的实现可以从输入中读取net.Conn并将凭证作为AuthInfo. 然后在您的处理程序代码中,您可以通过peer.FromContext. 或者,如果您希望在到达处理程序代码之前进行身份验证,您可以直接在拦截器中TransportCredentials.ServerHandshake或通过拦截器进行验证。

另见:https ://groups.google.com/g/grpc-io/c/FeQV7NXpeqA


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信