服务器应用程序支持身份验证,该身份验证要求与其连接的客户端提供用户名和密码。机器内部也可能有一个客户端,我不希望对其进行身份验证。同一台机器中的客户端使用 LOOPBACK 地址与服务器连接。我想要的是,如果我能以某种方式为 gRPC 连接的目标 IP 应用过滤器并决定是否应用身份验证。有办法吗?谢谢 !func (s *RShellServer) ExecCmd(stream RShell_ExecCmdServer) error { # For example, something like this if condition. if (Conn().destination_ip != LOOPBACK) { if err, ok := gnmi.AuthorizeUser(stream.Context()); !ok { return fmt.Errorf("%s", err) } } req, err := stream.Recv() if err != nil { return fmt.Errorf("Error reading request: %s", err) }}
1 回答

吃鸡游戏
TA贡献1829条经验 获得超7个赞
你的 GRPC 服务应该是这样的
func (MyServer) SomeFunction(ctx context.Context, req *myserver.Request) (resp *myserver.Response, err error)
然后你可以使用对等库并从上下文中提取对等信息,如`
p, err := peer.FromContext(ctx)
并使用从对等方获取地址
p.Addr
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报
0/150
提交
取消