跳到主要内容

Appendix A. 用例 (Use Cases)

本附录描述本规范可被使用的不同方式, 包括说明可能需要做出的一些选择. 其中一些选择彼此独立, 可以组合使用; 另一些选择则相互关联.

A.1. 开放式与受保护的动态客户端注册 (Open versus Protected Dynamic Client Registration)

A.1.1. 开放式动态客户端注册 (Open Dynamic Client Registration)

支持开放式注册的授权服务器允许在没有初始访问令牌 (initial access token) 的情况下进行注册. 这允许所有客户端软件向授权服务器注册.

A.1.2. 受保护的动态客户端注册 (Protected Dynamic Client Registration)

支持受保护注册的授权服务器要求在发起注册请求时使用初始访问令牌. 客户端或开发者如何接收该初始访问令牌, 以及授权服务器如何验证该初始访问令牌, 均超出本规范范围. 一种常见方式是, 开发者使用授权服务器上的手动预注册门户, 由该门户向开发者签发初始访问令牌.

A.2. 不带或带软件声明的注册 (Registration without or with Software Statements)

A.2.1. 不带软件声明的注册 (Registration without a Software Statement)

当注册请求中不使用软件声明 (software statement) 时, 授权服务器必须愿意使用未由任何权威方进行数字签名或 MAC 处理 (因而未被证明) 的客户端元数据值. 注意, 这一选择独立于开放式与受保护的选择, 并且初始访问令牌是另一种可能的证明形式.

A.2.2. 带软件声明的注册 (Registration with a Software Statement)

软件声明可在注册请求中使用, 以便由权威方对一组客户端元数据值提供证明. 当授权服务器希望将注册限制为由一组权威方证明过的客户端软件时, 或者希望知道多个注册请求指向同一客户端软件时, 这会很有用.

A.3. 由客户端或开发者注册 (Registration by the Client or Developer)

A.3.1. 由客户端注册 (Registration by the Client)

在某些用例中, 客户端软件会动态向授权服务器注册自身, 以获得客户端标识符以及与授权服务器交互所需的其他信息. 在这种情况下, 客户端软件中不会打包该授权服务器的客户端标识符.

A.3.2. 由开发者注册 (Registration by the Developer)

在某些情况下, 开发者 (或开发者使用的开发软件) 会预先向授权服务器或一组授权服务器注册客户端软件. 在这种情况下, 授权服务器的客户端标识符值可以随客户端软件一起打包.

A.4. 每个客户端实例或每个客户端软件的 Client ID (Client ID per Client Instance or per Client Software)

A.4.1. 每个客户端软件实例的 Client ID (Client ID per Client Software Instance)

在某些情况下, 某个客户端软件的每个已部署实例都会动态注册并获得不同的客户端标识符值. 例如, 当使用授权码流程 (code flow) 时, 这可能是有利的, 因为它还允许每个客户端实例拥有自己的客户端密钥 (client secret). 这对原生客户端很有用, 因为原生客户端无法维护与软件一起打包的客户端密钥值的机密性, 但可能能够维护按实例分配的客户端密钥的机密性.

A.4.2. 在客户端软件所有实例之间共享的 Client ID (Client ID Shared among All Instances of Client Software)

在某些情况下, 某个客户端软件的每个已部署实例会共享一个通用客户端标识符值. 例如, 对于使用隐式流程 (implicit flow) 且不涉及客户端密钥的浏览器内客户端, 通常就是这种情况. 特定授权服务器可能会选择维护软件声明值与客户端标识符值之间的映射, 并为某个特定软件的所有注册请求返回相同的客户端标识符值. 授权服务器在什么情况下会这样做, 以及此情况下所需的软件声明具体特征, 均超出本规范范围.

A.5. 有状态或无状态注册 (Stateful or Stateless Registration)

A.5.1. 有状态客户端注册 (Stateful Client Registration)

在某些情况下, 授权服务器会维护已注册客户端的状态, 通常使用客户端标识符值索引该状态. 此状态通常包括与客户端注册关联的客户端元数据值, 也可能包括特定于授权服务器实现的其他状态. 使用有状态注册时, 可以支持用于检索和/或更新此状态的操作. [RFC7592] 描述了一组可用于有状态注册的操作.

A.5.2. 无状态客户端注册 (Stateless Client Registration)

在某些情况下, 授权服务器会以无需维护任何已注册客户端本地状态的方式实现. 实现这一点的一种方法是, 将所有注册状态编码到返回的客户端标识符值中, 并可能使用授权服务器可解密的方式加密该状态, 以维护该状态的机密性和完整性.