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

想知道是否有一种方法可以访问底层 net.Conn 以使用 SO_PEERCRED 检索用户凭据并在服务器处理请求之前对其进行验证。


从https://blog.jbowen.dev/2019/09/using-so_peercred-in-go/,需要 net.UnixConn 返回用于验证的 unix.Ucred。因此,如果服务器请求处理程序有某种方法可以访问 net.Conn,这应该很容易


我查看了 UnaryServerInterceptor,但 UnaryServerInterceptor 中提供的任何内容似乎都没有包含 net.Conn


func 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)

}


一只甜甜圈
浏览 128回答 1
1回答

小怪兽爱吃肉

接口方法TransportCredentials.ServerHandshake是您需要的接缝。您的实现可以从输入中读取net.Conn并将凭证作为AuthInfo. 然后在您的处理程序代码中,您可以通过peer.FromContext. 或者,如果您希望在到达处理程序代码之前进行身份验证,您可以直接在拦截器中TransportCredentials.ServerHandshake或通过拦截器进行验证。另见:https ://groups.google.com/g/grpc-io/c/FeQV7NXpeqA
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go