OAuth 简介
什么是 OAuth2.0?
OAuth(Open Authorization)是关于授权的开放网络标准协议,允许用户授权第三方应用访问其存储在其他服务提供者上的信息,而无需将用户名和密码提供给第三方应用。OAuth 在全球范围内得到广泛应用,当前版本为 2.0,即 OAuth2.0。
OAuth2.0 典型应用场景
OAuth 2.0 的应用场景非常广泛,包括但不限于:
1. 第三方应用访问用户在其他服务上的信息。例如,一个应用通过 OAuth 2.0 访问用户在飞书、钉钉或其他应用等上面的数据。
2. 第三方应用代表用户执行操作。例如,一个邮件客户端应用通过 OAuth 2.0 发送用户的电子邮件。
3. 第三方应用使用 OAuth 2.0 实现用户的单点登录。例如,用户可以使用飞书、钉钉或者其他认证源账号登录其他应用。
企业控制台的 OAuth2.0 认证源功能即实现场景三:使用其他认证源账号,通过 OAuth2.0 协议实现用户单点登录到企业控制台。
OAuth 2.0 基本概念
OAuth2.0 的运行流程涉及一些名词和概念,熟悉这些名词和概念有助于理解 OAuth 2.0 机制。
常见名词 | 名词解释 |
客户端(Client) | 请求访问资源的第三方应用;客户端可以是 Web 站点、App、设备等 |
服务提供商(Service Provider) | 服务提供商是指提供、存放资源的网络服务 |
资源所有者(Resource Owner) | 资源所有者通常就是指用户,他们拥有服务提供商上的资源 |
授权服务器(Authorization Server) | 授权服务器是服务提供商用于处理和发放访问令牌的服务器。当用户请求访问资源时,需要先向授权服务器请求访问令牌 |
资源服务器(Resource Server) | 资源服务器是服务提供商用于存储和管理资源的服务器;当用户拥有访问令牌后,就可以向资源服务器请求访问资源 |
访问令牌(Access Token) | 访问令牌是授权服务器发放给客户端的一个凭证,表示客户端有权访问资源所有者的资源。访问令牌有一定的有效期,过期后需要使用刷新令牌来获取新的访问令牌 |
刷新令牌(Refresh Token) | 刷新令牌是授权服务器在发放访问令牌时一同发放的一个凭证,用于在访问令牌过期后获取新的访问令牌。刷新令牌通常有较长的有效期,甚至可以设置为永不过期 |
用户代理(User Agent) | 通常指浏览器 |
配置步骤
步骤1:配置凭证信息
1. 在企业管理后台 > 组织与成员 > 认证源管理中,单击展开添加认证源。选择 OAuth2 认证源 ,单击添加。

2. 填写第三方身份提供商提供的基础配置信息(包括 Client ID、Client Secret、Scopes 授权范围)。

3. 系统会为您生成“回调地址(Redirect URI)”,请复制并妥善记录。该项信息需提供给第三方身份提供商进行配置。

步骤2:Endpoint 配置
1. 选择“检验 token 身份验证方式”。该方式一般由第三方身份提供商定义,也可以由企业控制台定义、第三方身份提供商进行匹配。企业控制台支持 Basic Auth 和 Form Post 两种方式。

2. 填写第三方身份提供商提供的 Endpoint 信息,包括:认证端点(Authorization Endpoint)、Token 端点(Token Endpoint)、用户信息端点(Userinfo Endpoint)。

3. 选择“UserInfo 接口 Token 携带方式”。该方式一般同样由第三方身份提供商定义,也支持由企业控制台定义、第三方身份提供商进行匹配。企业控制台支持:请求头参数传递(Authorization Request Header Field)、URI 请求参数传递(URI Query Parameter)和表单编码传递(Form-encode Body Parameter)。

步骤3:配置关联规则
1. 匹配逻辑预置字段
属性字段名称 | 属性字段标识 | 属性字段类型 |
用户唯一标识 | user.sub | String |
用户登录名 | user.preferred_username | String |
手机号 | user.phone_number | String |
邮箱 | user.email | String |

2. 新建用户预置属性字段
属性字段名称 | 属性字段标识 | 属性字段类型 |
用户唯一标识 | user.sub | String |
用户名 | user.name | String |
用户登录名 | user.preferred_username | String |
手机号 | user.phone_number | String |
邮箱 | user.email | String |
