首页 理论教育 预定义Handle数据类型简介

预定义Handle数据类型简介

时间:2023-11-23 理论教育 版权反馈
【摘要】:每一个Handle Value 必须在其<type>字段中指定数据类型。Handle 系统预先定义了一组数据类型来提供Handle 服务。例如,HS_ADMIN 是用于描述Handle 管理员或管理员小组的预定义数据类型。当Handle 没有指定类型为HS_ADMIN 的Handle值时,只有站点管理员可以操作当前Handle。针对任何Handle 服务的服务请求都会被分配到不同的服务站点,并发送到站点内的不同服务器计算机。另外,它也为每个Handle 服务都提供了避免任何单点故障的方式。

预定义Handle数据类型简介

每一个Handle Value 必须在其<type>字段中指定数据类型。Handle 系统预先定义了一组数据类型来提供Handle 服务。例如,HS_ADMIN 是用于描述Handle 管理员或管理员小组的预定义数据类型。HS_SITE 是用于描述任何Handle 系统服务组件的服务接口的预先定义的数据类型。

1.Handle 管理员:HS_ADMIN

每个Handle 可以指定一个或多个管理员,也可以不指定。任何管理操作(如添加、删除、修改)都只能由具有足够权限的Handle 管理员来执行。Handle 管理员由类型为HS_ADMIN 的Handle 值来定义。每个Handle 可以定义多个类型为HS_ADMIN 的Handle 值,每个值可以定义针对当前Handle 的不同执行权限。当Handle 没有指定类型为HS_ADMIN 的Handle值时,只有站点管理员可以操作当前Handle。

一个HS_ADMIN 是一个Handle Value,其<type>字段为HS_ADMIN,其<data>字段包含以下条目:

<AdminRef>:引用到的Handle Value,指向一个Handle 身份。引用由Handle 名称(UTF-8 字符串)加上Handle 索引值(一个4 字节的无符号整数)。Handle Value 标识了当前Handle 管理员的Handle 身份。

<AdminPermission>:一个16 位的掩码,定义了HS_ADMIN 值标识的Handle 管理员的管理权限。

一个Handle 可以有多个类型为HS_ADMIN 的Handle Value,其中每个都定义不同的Handle 管理员。不同的管理员可以扮演不同的角色或被授予不同的权限。例如,Handle(86.1000.1000/TEST)可拥有两个管理员,其中一个只有在该Handle 下创建新Handle 的权限,而另一个可以拥有删除、修改Handle 的权限。

管理员权限在类型为HS_ADMIN 的Handle Value<data>字段中的<AdminPermission>项进行编码。每个权限被编码为一个比特位的标志。如果该标识被设置为1 就表示许可,0 就表示禁止。

类型为HS_ADMIN 的Handle Value 会被Handle 服务器用来在执行任何操作请求之前对Handle 管理员进行验证。服务器验证是首先检查客户端是否已拥有匹配任何Handle 管理员参考值的口令、密钥(私钥)的Handle身份,再通过Handle 系统认证协议进行的。

2.Handle 服务站点信息:HS_SITE

Handle 系统由一个GHR 和数量不受限制的LHS 组成。每个Handle服务(不管是全球根还是本地服务)都可以被复制到多个服务站点中。每个服务站点可能由多个服务器组成。针对任何Handle 服务的服务请求都会被分配到不同的服务站点,并发送到站点内的不同服务器计算机。这样的架构保证了每个Handle 服务都能管理大量的Handle 解析和处理请求。另外,它也为每个Handle 服务都提供了避免任何单点故障的方式。

每个Handle 服务,不管是全球根还是本地服务,都可以提供解析和管理Handle 集合的相同功能集,但Handle 服务各自都完全不同,因为每个Handle 服务都负责不同的Handle。它们在选择、数量和组件方面也有可能配置不同,例如提供Handle 解析和管理的服务器,可以创建不同的Handle服务,由不同的组织进行管理。

服务站点通常由部署在本地互联网内的服务器计算机或计算机集群组成。这些计算机协同工作,对本地的数据存储和处理负荷进行分配。可以用大量不同位置的服务器来组成站点,但是不推荐这种方式。此外,也可以用同一组服务器作为不同的站点提供服务。

每个Handle 服务站点都由一个类型为HS_SITE 的Handle Value 进行定义。HS_SITE 是一个预先定义的Handle 数据类型。一个类型为HS_SITE的Handle Value 通过识别组成站点的服务器IP 和端口来定义一个Handle服务站点。

HS_SITE 值是一个Handle Value,其<type>字段是HS_SITE,其<data>字段包含以下条目:

<Version>:一个2 字节的值,标识HS_SITE 的版本号。版本号明确了HS_SITE 值所使用的数据格式。它用来容纳一段时间的后向兼容性

<protocolVersion>:标识Handle 协议版本的数值。高字节标识主要版本,低字节标识次要版本。

<serialNumber>:一个2 位整数值,用于Handle 系统协议中客户端和服务器之间HS_SITE 值的同步。

<primarySite>:一个布尔值,用来标识当前Handle 服务站点是否为主站点,主站点为true,否则为false。

<multiPrimary>:一个布尔值,用来标识当前Handle 服务是否为多主站点,多主站点为true,否则为false。

<attributes>:一个键值对<name,value>数组,用来描述当前Handle 服务站点的相关信息。

<servers>:一个符合json 格式要求的数组,用来描述当前Handle 服务具体服务器的相关配置信息。

<serverId>:用来标识为当前Handle 服务站点提供具体服务的服务器计算机的编号。

<address>:用来配置为当前Handle 服务站点提供具体服务的服务器IP 地址

<publickey>:内容为符合json 格式要求的公钥配置信息,其中<format>为格式化类型,<value>为公钥具体内容,其中又包含<kty>和公钥计算时的相关参数。<kty>是生成这种公私钥对的具体算法,例如,RSA 算法、DSA 算法和SM2 算法等。

<inerfaces>:一个符合json 格式要求的数组,用来描述当前Handle服务站点支持的服务协议和协议对应的端口信息。其中<query>代表查询,其值为true 时为支持查询,为false 时为禁止查询;<admin>代表管理,其值为true 时为支持管理操作,为false 时为禁止管理操作;<port>代表具体端口号;<protocol>代表具体协议,如UDP、TCP 或HTTP。

服务站点内的每个服务器都负责Handle 服务管理的一个子集。客户端可以通过执行通用的散列运算找到对应的服务器。该散列操作将首先把Handle 内所有ASCII 字符转换为大写。然后在转换的Handle 字符串部分应用MD5 哈希,结果是一个16 字节整数。整数的绝对值将由服务器数量进行划分。剩下的部分是HS_SITE 值中列出的<serverId>序列号,根据<serverId>,客户可以找到处理请求的Handle 服务器的IP 地址。(www.xing528.com)

3.Handle 公钥:HS_PUBKEY

HS_PUBKEY 属于预先定义的数据类型,它是用来将用户公钥注册在Handle 服务并向外发布的一种方式。它的内容是字符串类型,内容格式采用json 标准格式进行格式化。

HS_PUBKEY 值是一个Handle Value,内容保存Handle 身份中的公钥信息,用于在用户私钥登录时对用户身份进行验证。<type>是HS_PUBKEY,<data>是json 格式的公钥字符串。内容可以通过文件读取的方式直接将用户的公钥文件读取到系统并保存。

在Handle 服务进行身份验证时,HS_PUBKEY 值加上其对应的索引用来标识用户在Handle 服务中的Handle 身份。

4.Handle 口令:HS_SECKEY

HS_SECKEY 属于Handle 身份验证的一个预先定义的数据类型,将经过哈希(HASH)后的用户口令保存在Handle 服务中。

HS_SECKEY 值是一个Handle Value,内容保存Handle 身份中的口令信息。<type>是HS_SECKEY,<data>是String 类型的字符串。

在Handle 服务进行身份验证时,HS_SECKEY 值加上其对应的索引用来标识用户在Handle 服务中的Handle 身份。

5.Handle 值列表:HS_VLIST

HS_VLIST 属于预先定义的数据类型,它允许Handle Value 作为一系列其他Handle Value 的引用。HS_VLIST 值是一个Handle Value,<type>是HS_VLIST,其<data>由一个4 字节的无符号整数后跟引用到其他Handle的列表组成。整数指明了引用的索引,而引用可以参照其他Handle 下或者相同Handle 的Handle 值。每个引用由一个4 字节无符号整数后跟一个UTF-8 字符串,标识出引用Handle Value 的索引和Handle。

6.Handle 服务:HS_SERV

不管是全球根节点还是本地服务,任何Handle 服务都可以以一组HS_SITE 值来定义。这些HS_SITE 值可以直接分配给相关命名权限Handle,或者可以通过使用服务Handle 引入一个附加级别。服务Handle可以被认为是Handle 服务的一个名称。它可以用来保留Handle 服务的HS_SITE 值和通过HS_SERV 值引用命名权限Handle。HS_SERV 值是一个Handle 值,<type>字段是HS_SERV,<data>字段中包含了对服务Handle的引用。

类型为HS_SERV 的Handle 值通常被分配到命名权限Handle,用于指派客户端到相应Handle 服务。

服务Handle 的使用允许在多个命名权限之间进行服务信息的共享。它还允许在某个部分更改服务配置(如添加新的站点),不会涉及每个命名权限Handle。另外,该机制也可以用于支持出于各种原因的从一个Handle服务到另一个Handle 服务的引用。

一个命名权限Handle 分配的HS_SERV 值不能超过一个,否则会造成错误。如果一个命名权限Handle 既有HS_SITE 值也有一个HS_SERV 值,那么HS_SITE 值将会用于命名权限的服务。

对服务Handle 的使用引发了一些特殊考虑,应该避免服务Handle 的多级重定向,因为这样会严重损失查询效率,但不会发出错误提示。所以应该找出服务Handle 的引用循环或者HS_SERV 值指向不存在的服务Handle,并向用户反馈错误信息。

7.Handle 别名:HS_ALIAS

实际上,一个数字对象很有可能会有多个名称来确定这个对象。Handle系统通过预先定义数据类型HS_ALIAS 来实现这样的功能。HS_ALIAS 值是一个Handle Value,其<type>字段是HS_ALIAS,其<data>字段包含对另一个Handle 的引用。带有HS_ALIAS 值的Handle 就是HS_ALIAS 值中引用Handle 的别名Handle。别名Handle 除了HS_ALIAS 和HS_ADMIN(用于权限管理)值以外,没有任何附件Handle 值。这对防止Handle 和别名Handle 之间的不一致性来说是必要的。

在Handle 的解析过程中,客户端如果取回来一个HS_ALIAS 值,则表明这个 Handle 是一个别名 Handle。接下来,客户端会重新查询HS_ALIAS 值指定的Handle,直到获得最终结果。

使用别名Handle 会带来一些特殊的考虑。例如,为了提高查询效率,应当避免多级别名,应找出别名循环和指向不存在的Handle 别名并将错误信息反馈给用户。

别名Handle 的一个潜在用途是支持任何指定资源的所有权转移。当Handle 所指定的资源通过Handle 从一个组织转移到另一个时,会创建资源的新Handle。为了避免不一致性和任何引用的错漏,所有权转移之前使用的Handle 可以变成另一个别名Handle,其HS_ALIAS 值指向新创建的Handle。

8.URL

URL 类型作为一种预定义的数据类型,<type>为URL,<data>是String类型的字符串,用来保存可以重定向的URL。

在Handle 解析过程中,客户端发送请求并取回Handle 内容后,如果发现Handle 值列表中存在URL 类型的Handle 值,Handle 服务会自动打开浏览器,并自动重定向到URL 类型的Handle 值所指向的地址。如果在Handle 值列表中存在多个URL 类型的Handle 值,重定向时只能打开一个URL 地址(索引最大那个),为了避免重定向产生歧义,在Handle 值定义时,用户最好只定义一个类型为URL 的Handle 值。

9.EMAIL

EMAIL 类型属于预先定义的数据类型,<type>为EMAIL,<data>是String 类型的字符串,内容用来保存符合邮件地址格式的字符串。Handle系统并不会对存储内容进行格式验证,即用户输入的内容是可以不符合邮件地址格式的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈