使用Unified Automation库配置OPC UA服务器用户名与角色
Unified Automation OPC UA服务器:用户创建、角色分配及身份认证配置
一、用户与角色的创建顺序
先创建角色,再关联用户。角色是权限的集合载体,先定义角色对应的访问权限(如Read、Write、Browse),再将用户关联到对应角色以获得权限。
二、创建用户并关联角色的具体实现
1. 创建角色并配置权限
// 创建自定义角色节点(命名空间索引1,可根据实际调整) UaNodeId roleNodeId = UaNodeId("Operator", 1); UaRoleType roleType(session); // 初始化角色:节点ID、名称、显示名称 UaStatus status = roleType.createRole(roleNodeId, "Operator", UaLocalizedText("en", "Operator Role")); // 为角色添加读取数据值的权限 UaPermissionMapping readPermission; readPermission.setNodeId(UaNodeId(UA_NS0ID_READ)); readPermission.setGranted(true); roleType.addPermission(readPermission); // 可按需添加其他权限,如Write、Browse等
2. 添加用户到服务器用户管理器
// 获取服务器的用户身份管理实例 UaUserIdentityManager* pUserManager = pUaServer->getUserIdentityManager(); // 添加用户(参数:用户名、密码、用户描述) UaStatus status = pUserManager->addUser("opc_user", "opc_pass", UaString("Operator User"));
3. 将用户关联到角色
// 绑定用户到目标角色的成员列表 UaRoleMembers roleMembers(session, roleNodeId); // 用户的NodeId需与创建时一致(此处假设用户节点在命名空间1) status = roleMembers.addMember(UaNodeId("opc_user", 1));
三、解决匿名用户无法查看数值的问题
匿名用户默认仅拥有Browse权限(查看模型结构),需为内置的AnonymousRole添加Read权限:
// 获取内置匿名角色的节点ID UaNodeId anonymousRoleId = UaNodeId(UA_NS0ID_ANONYMOUSROLE); UaRoleType anonymousRole(session, anonymousRoleId); // 添加读取权限 UaPermissionMapping readPerm; readPerm.setNodeId(UaNodeId(UA_NS0ID_READ)); readPerm.setGranted(true); anonymousRole.addPermission(readPerm);
四、修复UserNameIdentityToken无法连接的问题
1. 确保服务器端点启用用户名认证
// 获取服务器配置与端点信息 UaServerConfig* pConfig = pUaServer->getConfig(); UaEndpoint endpoint = pConfig->getEndpoint(0); // 取第一个端点,可根据实际调整 // 添加用户名令牌支持(安全策略根据实际场景选择,示例为无加密) endpoint.addUserTokenPolicy(UaUserTokenPolicy( UA_USERTOKENPOLICY_USERNAME, "", UA_SECURITY_POLICY_NONE_URI )); // 更新端点配置 pConfig->updateEndpoint(endpoint);
2. 关键排查点
- 调用
pUserManager->userExists("opc_user")验证用户已成功添加到服务器 - 客户端令牌的用户名、密码需与服务器配置完全一致
- 客户端使用的安全策略需与服务器端点配置匹配(如无加密、Basic256Sha256等)
内容的提问来源于stack exchange,提问作者oiergoiergh
相关产品推荐
相关产品推荐

