2.1. 客户端类型
根据客户端与授权服务器进行认证的安全程度,OAuth 2.1 定义了两种客户端类型。
“私密”: 在授权服务器上有凭据的客户端被称为“私密客户端”。
“公开”: 没有凭据的客户端被称为“公开客户端”。
任何拥有凭据的客户端必须采取预防措施,防止它们的凭据被泄露或滥用。
在一段 OAuth 流程中,客户端认证能让授权服务器确保它在与特定的客户端交互(通过后者的 client_id 辨认)。授权服务器可能会做出一系列决策,例如是在每次授权时都征求用户同意,还是因为确信“自己确实在与正确的客户端通信”,所以只在第一次授权时征求用户同意。
授权服务器是否,以及如何,验证客户端的身份,或者验证其提供方/操作方的身份,不在本规范的范围内。授权服务器应该衡量其对客户端身份的确信程度,来决定是否允许客户端访问更敏感的资源和操作(例如客户端凭据许可类型),以及征求用户同意的频率。
一个 client_id 不应该被视为多种类型的客户端。
本规范的设计围绕了以下几种客户端形式:
“网络应用”: 网络应用是运行在网络服务器上的客户端。资源所有者在其使用的设备上,通过用户代理渲染的 HTML 用户界面,来访问客户端。客户端凭据,以及颁发给客户端的访问令牌,都存储在网络服务器上,不暴露给资源所有者,也无法被后者接触。
“浏览器应用”: 浏览器应用是从网络服务器上下载代码,并在用户代理(例如浏览器)中运行的客户端。资源所有者能够轻易接触到(并且经常能直接看到)协议的数据和凭据。如果这种应用希望使用客户端凭据,那么建议为其前端配备一个后端(Backend for Frontend 模式)。这种应用直接在用户代理中运行,因此它们在请求授权时,可以丝滑地发挥用户代理的能力。
“原生应用”: 原生应用是安装并运行在资源所有者的设备上的客户端。资源所有者能够接触到协议的数据和凭据。应用中的任何客户端认证凭据都被认为是可提取的。动态颁发访问令牌和刷新令牌是一种不错的保护措施。在某些平台上,这些凭据会受到保护,不让同设备的其它应用访问。如果这种应用希望使用客户端凭据,那么建议为其前端配备一个后端(Backend for Frontend 模式),或者使用客户端动态注册 [RFC7591] 在运行时颁发凭据。