Windows Server 2022中.NET Remoting认证失败问题求助
解决.NET Remoting服务在Windows Server 2022中认证失败的问题
问题根源
Windows Server 2022针对NTLM认证机制做了更严格的安全限制,同时.NET Remoting这类老旧技术的默认配置在新系统下不再兼容,导致身份认证流程异常:服务端无法触发IsConnectingIdentityAuthorized进行身份校验,反而重复调用IsConnectingEndPointAuthorized,最终客户端返回认证失败错误。
具体解决步骤
显式配置Remoting认证与授权规则
在服务端的代码或配置文件中,强制指定认证级别和授权模式,确保服务端进入身份校验流程:
代码方式示例:IDictionary channelProps = new Hashtable(); // 指定最高级别的数据包隐私认证 channelProps["authenticationLevel"] = System.Net.Security.AuthenticationLevel.PacketPrivacy; // 启用身份授权校验 channelProps["authorization"] = "Identity"; TcpChannel serverChannel = new TcpChannel(channelProps, null, null); ChannelServices.RegisterChannel(serverChannel, false);配置文件方式示例:
<configuration> <system.runtime.remoting> <application> <channels> <channel ref="tcp" port="8080" authenticationLevel="PacketPrivacy" authorization="Identity" /> </channels> </application> </system.runtime.remoting> </configuration>调整NTLM策略兼容旧版认证
打开本地组策略编辑器(运行gpedit.msc),导航到计算机配置>管理模板>系统>凭据分配>阻止NTLM: NTLM身份验证在本地上,将该策略设置为未配置或已禁用——Windows Server 2022默认可能禁用了NTLMv1,而旧版.NET Remoting可能依赖该协议完成认证。校验服务账户权限与防火墙规则
- 确保Windows服务运行账户拥有Remoting端口的访问权限,建议先用本地系统账户测试排除权限问题;
- 检查服务器防火墙,确认Remoting使用的端口(如8080)已开放入站/出站连接。
同步客户端认证配置
在客户端代码中同步设置相同的认证级别,避免因两端配置不一致导致协商失败:IDictionary clientProps = new Hashtable(); clientProps["authenticationLevel"] = System.Net.Security.AuthenticationLevel.PacketPrivacy; TcpClientChannel clientChannel = new TcpClientChannel(clientProps, null); ChannelServices.RegisterChannel(clientChannel, false);
日志现象解释
IsConnectingEndPointAuthorized被调用两次,是因为服务端在首次认证协商失败后尝试重连,但由于缺少身份授权配置,始终无法进入IsConnectingIdentityAuthorized的身份校验环节,最终触发客户端的认证失败提示。
内容的提问来源于stack exchange,提问作者Billy
相关产品推荐
相关产品推荐

