在初始化协议之前,客户端在授权服务器注册。典型的包括终端用户与html注册表单的交互。
客户端注册并不需要客户端和授权服务器的直接交互。在授权服务器支持时,注册可以依靠其他方式建立信任并获得所需的客户端属性(例如重定向URI,客户端类型)。例如,注册可以使用自发行或第三方发行声明或通过授权服务器使用信任通道执行客户端发现完成。
在注册客户端时,客户端开发者应该:
- 指定客户端类型
- 提供客户端重定向URI
- 包含其他授权服务器所需的信息,例如应用名,网页,描述,logo等
客户端类型
基于与授权服务器进行安全验证的能力定义了两种类型(是否能维持凭据的机密性)
- 机密客户端
- 公开客户端
客户端标识
授权服务器向注册客户端颁发一个代表了客户端提供的注册信息的独特字符串作为标识。该标识是公开的,暴露给资源拥有者并且不能被单独用于客户端认证。
客户端标识的字符串大小并为被规范定义。客户端应避免对标识的大小做出假定。授权服务器应该记录标识的长度。
客户端验证
如果客户端类型是机密的,客户端和授权服务器建立一个合适的客户端认证方法用于授权服务器的安全性需求。授权服务器可能接受满足安全性需求的任何形式的客户端验证。
机密客户端典型的建立一系列客户端凭据用于授权服务器进行身份验证(密码,公钥,私钥)。
授权服务器可能建立一个对公开客户端的验证方法。但是授权服务器一定不能依赖公开客户端验证达到识别客户端的目的。
每次请求不能使用一个以上的验证方法。
1.客户端密码
拥有客户端密码的客户端可能使用HTTP基本认证来与授权服务器进认证。
授权服务器可能支持在请求体中包含客户端凭据,参数包括client_id和client_secret。但并不推荐在请求提中使用这两个参数包含客户端凭据,应该限于不能直接采用HTTP基本身份验证方案的客户端,并且只能包含在请求体中。
2.其他验证方法
授权服务器可以支持任何与其安全要求匹配的合适的HTTP身份验证方案。当使用其他身份验证方法时,授权服务器必须定义客户端标识(注册记录)和认证方案之间的映射。
未注册客户端
该规范并没有排除对未注册客户端的使用。但是需要做额外的安全性分析并审查互操作性的影响。