8. 可扩展性 (Extensibility)
8.1. 定义访问令牌类型 (Defining Access Token Types)
访问令牌类型可以通过两种方式之一定义: 按第 11.1 节的流程注册到 Access Token Types 注册表, 或使用唯一的绝对 URI 作为其名称.
使用 URI 名称的类型应该 (SHOULD) 限于不具有普遍适用性的厂商特定实现, 并且与其所使用资源服务器的实现细节相关.
所有其他类型都必须 (MUST) 注册. 类型名称必须 (MUST) 符合 type-name ABNF. 如果类型定义包含新的 HTTP 认证方案, 则类型名称应该 (SHOULD) 与 HTTP 认证方案名称相同 (如 [RFC2617] 所定义). 令牌类型 "example" 保留用于示例.
type-name = 1*name-char
name-char = "-" / "." / "_" / DIGIT / ALPHA
8.2. 定义新的端点参数 (Defining New Endpoint Parameters)
用于授权端点或令牌端点的新请求或响应参数, 按第 11.2 节的流程在 OAuth Parameters 注册表中定义和注册.
参数名称必须 (MUST) 符合 param-name ABNF, 且参数值语法必须 (MUST) 明确定义, 例如使用 ABNF, 或引用现有参数的语法.
param-name = 1*name-char
name-char = "-" / "." / "_" / DIGIT / ALPHA
不具有普遍适用性且与其所使用授权服务器实现细节相关的未注册厂商特定参数扩展, 应该 (SHOULD) 使用不太可能与其他已注册值冲突的厂商特定前缀, 例如以 "companyname_" 开头.
8.3. 定义新的授权授予类型 (Defining New Authorization Grant Types)
新的授权授予类型可以通过为 "grant_type" 参数分配唯一的绝对 URI 来定义. 如果扩展授权授予类型需要额外的令牌端点参数, 这些参数必须 (MUST) 按第 11.2 节所述注册到 OAuth Parameters 注册表.
8.4. 定义新的授权端点响应类型 (Defining New Authorization Endpoint Response Types)
用于授权端点的新响应类型按第 11.3 节的流程在 Authorization Endpoint Response Types 注册表中定义和注册. 响应类型名称必须 (MUST) 符合 response-type ABNF.
response-type = response-name *( SP response-name )
response-name = 1*response-char
response-char = "_" / DIGIT / ALPHA
如果响应类型包含一个或多个空格字符 (%x20), 则将其作为以空格分隔的值列表进行比较, 且值的顺序无关紧要. 只能注册一种值顺序, 该注册覆盖同一组值的所有其他排列.
例如, 本规范未定义响应类型 "token code". 但是, 扩展可以定义并注册 "token code" 响应类型. 一旦注册, 同一组合不能再注册为 "code token", 但两个值都可以用于表示同一响应类型.
8.5. 定义附加错误码 (Defining Additional Error Codes)
当协议扩展 (即访问令牌类型, 扩展参数或扩展授权授予类型) 需要在授权码授予错误响应 (第 4.1.2.1 节), 隐式授予错误响应 (第 4.2.2.1 节), 令牌错误响应 (第 5.2 节), 或资源访问错误响应 (第 7.2 节) 中使用附加错误码时, 可以 (MAY) 定义此类错误码.
如果扩展错误码所配合使用的扩展是已注册的访问令牌类型, 已注册的端点参数, 或扩展授权授予类型, 则扩展错误码必须 (MUST) 按第 11.4 节的流程注册. 与未注册扩展一起使用的错误码可以 (MAY) 注册.
错误码必须 (MUST) 符合 error ABNF, 并且在可能时应该 (SHOULD) 以标识性名称作为前缀. 例如, 用于标识扩展参数 "example" 被设置为无效值的错误, 应该 (SHOULD) 命名为 "example_invalid".
error = 1*error-char
error-char = %x20-21 / %x23-5B / %x5D-7E