想知道是否有一种方法可以访问底层 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
- 1 回答
- 0 关注
- 125 浏览
添加回答
举报
0/150
提交
取消