6. SCIM EndpointApp Schema
EndpointApp schema 用于为客户端授权控制服务或遥测服务. 该 schema 标识应用程序, 并说明客户端应如何向各种服务认证.
EndpointApp 的 schema 使用以下 schema URI 标识:
urn:ietf:params:scim:schemas:core:2.0:EndpointApp
该 schema 定义以下属性.
6.1. 通用属性 (Common Attributes)
与第 2.1 节类似, EndpointApp schema 包含 [RFC7643] 第 3.1 节规定的三个通用属性.
6.2. 单值属性 (Singular Attributes)
applicationType: 字符串, 表示应用程序类型. 它只包含两个值: deviceControl 或 telemetry. deviceControl 是发送命令以控制设备的应用程序. telemetry 是从设备接收数据的应用程序. 该属性是必需的且不区分大小写. 该属性不可变, 并且应该默认返回. 此属性没有唯一性约束.
applicationName: 字符串, 表示应用程序的人类可读名称. 此属性是必需的且可变. 该属性应该默认返回, 且没有唯一性约束.
clientToken: 字符串, 包含客户端将用于认证自身的令牌. 每个令牌可以是最长 500 个字符的字符串. 它不可变. 它是只读的, 区分大小写, 并且在未配置 certificateInfo 对象时生成. 如果存在, 默认返回. SCIM server 应预期 SCIM client 会将 client token 与客户端基础设施中的其他组件共享.
groups: 可选的只读复杂对象, 表示组成员关系. 其形式与 [RFC7643] 第 4.1.2 节定义的形式完全相同.
6.3. 复杂属性 (Complex Attributes)
6.3.1. certificateInfo
certificateInfo 是复杂属性, 包含与用于设备控制或遥测目的而连接的应用客户端相关联的 X.509 证书 subject name 和根 Certificate Authority (CA) 信息.
rootCA: 如 [RFC4648] 第 4 节所述的 base64 编码字符串. 它是适用于客户端应用访问所用证书的 trust anchor 证书. 该对象不是必需的. 它是单值, 区分大小写且可读写. 如果不存在, 必须通过带外方式配置一组 trust anchors.
subjectName: 字符串, 包含以下两种名称之一:
-
证书 subject 字段中出现的 distinguished name, 如 [RFC5280] 第 4.1.2.4 节所述; 或
-
subjectAlternateName 中的 dnsName, 如 [RFC5280] 第 4.2.1.6 节所述.
在后一种情况下, 验证此类证书的服务器在通过 DNS 反向查找解析出的对等方名称与证书中的 dnsName 不匹配时, 应拒绝连接. 如果存在多个 dnsNames, 则由服务器实现处理与这些名称相关的任何授权冲突. 此属性不是必需的, 且不区分大小写. 它是可变的单值属性.
+=================+=======+===+=======+=========+========+========+
| Attribute | Multi |Req| Case | Mutable | Return | Unique |
| | Value | | Exact | | | |
+=================+=======+===+=======+=========+========+========+
| applicationType | F |T | F | Imm | Def | None |
+-----------------+-------+---+-------+---------+--------+--------+
| applicationName | F |T | F | RW | Def | None |
+-----------------+-------+---+-------+---------+--------+--------+
| clientToken | F |F | T | RO | Def | None |
+-----------------+-------+---+-------+---------+--------+--------+
| certificateInfo | F |F | F | RW | Def | None |
+-----------------+-------+---+-------+---------+--------+--------+
| rootCA | F |F | T | RW | Def | None |
+-----------------+-------+---+-------+---------+--------+--------+
| subjectName | F |T | T | RW | Def | None |
+-----------------+-------+---+-------+---------+--------+--------+
| groups | T |F | T | RO | Def | n/a |
+-----------------+-------+---+-------+---------+--------+--------+
表 2: EndpointApp Schema 属性的特征
图例: Req = Required, T = True, F = False, RO = ReadOnly,
RW = ReadWrite, N = No, Def = Default, Imm = Immutable
如果 certificateInfo 由客户端提供并被服务器接受, 服务器必须在其响应中返回该多值属性. 否则, 服务器预期返回 clientToken. 如果服务器既不返回 certificateInfo 也不返回 clientToken, 则必须预先安排外部认证, 如 [OAUTHv2]. 如果服务器接受证书并生成 clientToken, 则控制服务器和遥测服务器必须同时验证两者.
在客户端功能采用联合方式, 不同客户端可能为了不同目的而连接的情况下, 优先使用 certificateInfo.
示例:
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:EndpointApp"],
"id": "e9e30dba-f08f-4109-8486-d5c6a3316212",
"applicationType": "deviceControl",
"applicationName": "Device Control App 1",
"certificateInfo": {
"rootCA" : "MIIBIjAN...",
"subjectName": "www.example.com"
},
"meta": {
"resourceType": "EndpointApp",
"created": "2022-01-23T04:56:22Z",
"lastModified": "2022-05-13T04:42:34Z",
"version": "W\/\"a330bc54f0671c9\"",
"location": "https://example.com/v2/EndpointApps/e9e30dba-f08f-\
4109-8486-d5c6a3316212"
}
}
图 4: Endpoint App 示例.