OpcUA驱动代码调用OpenAsync报错:用户身份令牌无效求助
解决OpcUA无身份令牌登录时的"The user identity token is not valid"错误
当安全策略设为None且采用无用户名密码登录时,出现该错误通常是客户端未正确传递空/匿名身份令牌,或配置与服务端不匹配导致的,可按以下步骤排查修复:
显式配置匿名身份令牌
使用Workstation.ServiceModel.Ua时,需明确创建AnonymousIdentityToken并绑定到会话参数,避免SDK默认生成不兼容的令牌:// 初始化匿名身份令牌 var anonymousIdentity = new AnonymousIdentityToken(); // 配置会话参数,指定安全策略为None var sessionParams = new SessionParameters { EndpointUrl = "opc.tcp://your-server-address:port/your-endpoint", SecurityPolicyUri = SecurityPolicies.None, Identity = anonymousIdentity }; // 创建会话通道时传入正确参数 this._channel = new SessionChannel(sessionParams);确认服务端匿名访问权限
尽管UaExpert能正常连接,仍需检查服务端配置是否明确开启了匿名登录权限,部分OpcUA服务器需要手动启用匿名用户组或身份验证规则。匹配正确的Endpoint
确保客户端连接的是SecurityPolicy=None的Endpoint,部分服务端会提供多个安全等级不同的Endpoint,可通过代码筛选验证:var discoveryClient = new DiscoveryClient("opc.tcp://your-server-address:port/discovery"); var endpoints = await discoveryClient.GetEndpointsAsync(); // 筛选安全策略为None的Endpoint var targetEndpoint = endpoints.FirstOrDefault(e => e.SecurityPolicyUri == SecurityPolicies.None); if (targetEndpoint != null) { sessionParams.EndpointUrl = targetEndpoint.EndpointUrl; }排查SDK版本问题
Workstation.ServiceModel.Ua部分旧版本存在匿名令牌处理的兼容性bug,尝试升级到最新稳定版,或查看SDK官方文档确认是否有相关修复说明。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

