💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。
概述
用户管理是Onvif协议的重要组成部分,它允许系统管理员通过网络接口创建、删除、修改用户账户,并分配不同的权限,以实现对设备的访问控制。在Onvif标准中,每个用户账户都关联着一组权限,这些权限决定了用户可以访问哪些服务和执行哪些操作。权限通常分为几种类型,比如:admin(管理员)、operator(操作员)、viewer(查看者)等,每种类型的权限集合由设备制造商定义。
用户管理主要通过User Management Service实现,包括GetUsers、CreateUsers、DeleteUsers、SetUser等方法,下面将分别进行介绍。
获取用户列表
GetUsers方法用于检索网络视频设备中所有用户的详细信息,包括:用户名、密码、用户级别(权限等级)、描述、有效期限等。为了安全起见,密码在某些实现中可能不可见,或进行了加密存储。
获取用户列表的请求比较简单,可以参考下面的SOAP报文。
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:onv="http://www.onvif.org/ver10/device/wsdl">
<soapenv:Header>
<!-- 安全认证信息 -->
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<onv:GetUsers/>
</soapenv:Body>
</soapenv:Envelope>
设备对GetUsers请求的响应通常会包含一个或多个用户的详细信息,每个用户数据通常被封装在User元素内。可以参考下面的示例报文来进行理解,其中的一些关键节点和属性描述如下。
<onv:UserList>:包含所有用户的容器元素。
<onv:User>:表示单个用户的信息条目。
<onv:Username>:用户的登录名。
<onv:UserLevel>:用户的权限等级,可能的值为"Admin"、"Operator"、"Viewer"等,具体取决于设备制造商的实现。
<soapenv:Envelope ...>
<soapenv:Body>
<onv:GetUsersResponse>
<onv:UserList>
<onv:User>
<onv:Username>admin</onv:Username>
<!-- 密码字段可能因安全原因被省略或加密 -->
<onv:UserLevel>Admin</onv:UserLevel>
<!-- 其他可能的字段,比如:UserDescription, UserPasswordExpiration等 -->
</onv:User>
<!-- 更多用户条目 -->
</onv:UserList>
</onv:GetUsersResponse>
</soapenv:Body>
</soapenv:Envelope>
创建用户
CreateUsers方法可以一次性创建一个或多个用户账户,每个用户账户可以配置用户名、密码、用户级别(权限等级)以及其他可能的用户属性,比如:用户描述、有效期限等。
创建用户时,客户端需要构造一个包含一个或多个User元素的SOAP请求,每个User元素定义了一个新用户的详细信息。可以参考下面的示例报文来进行理解,其中的一些关键节点和属性描述如下。
<onv:User>:表示一个待创建的用户账户的配置信息。
<onv:Username>:新用户的登录名。
<onv:Password>:用户的初始密码。
<onv:UserLevel>:用户的权限级别,具体选项由设备制造商定义。
<soapenv:Envelope ...>
<soapenv:Body>
<onv:CreateUsers>
<onv:User>
<onv:Username>NewUser1</onv:Username>
<onv:Password>SecureP@ssword1</onv:Password>
<onv:UserLevel>Operator</onv:UserLevel>
<!-- 可选的其他属性,比如:用户描述等 -->
</onv:User>
<!-- 如果需要同时创建多个用户,可在此添加更多的<onv:User>元素 -->
</onv:CreateUsers>
</soapenv:Body>
</soapenv:Envelope>
删除用户
DeleteUsers方法使客户端能够从支持Onvif的设备上删除一个或多个用户账户,此操作基于提供的用户标识(通常是用户Token),确保可以精确地定位和移除指定的账户。可以参考下面的示例报文来进行理解,其中的一些关键节点和属性描述如下。
<onv:UserReference>:指定要删除的用户的标识,其Token属性值是用户在设备上的唯一标识符,通常在使用GetUsers方法获取用户列表时可获得。
<soapenv:Envelope ...>
<soapenv:Body>
<onv:DeleteUsers>
<onv:UserReference Token="UserToken1"/>
<!-- 可以添加更多<onv:UserReference>元素,以删除多个用户 -->
</onv:DeleteUsers>
</soapenv:Body>
</soapenv:Envelope>
修改用户
SetUser方法用于更新一个已存在的用户账户的详细信息,可以通过它修改用户名、重置密码、变更用户权限等级,或更新用户描述等。可以参考下面的示例报文来进行理解,其中的一些关键节点和属性描述如下。
<onv:Username>:用户名,通常用于表示要修改的用户。
<onv:Password>:新的用户密码。
<onv:UserLevel>:更新后的用户权限级别。
<soapenv:Envelope ...>
<soapenv:Body>
<onv:SetUser>
<onv:User>
<onv:Username>ExistingUser</onv:Username>
<!-- 用户Token可能在某些实现中用于标识用户,但通常在请求中不是必需的 -->
<onv:Password>NewSecureP@ss</onv:Password>
<onv:UserLevel>Admin</onv:UserLevel>
<!-- 可能还包括其他可更新的用户属性 -->
</onv:User>
</onv:SetUser>
</soapenv:Body>
</soapenv:Envelope>