Oauth 标记和范围
Oauth 标记授权对受保护资源的访问。授权后,连接的应用程序代表客户端接收标记。范围进一步定义了连接的应用程序可以访问的受保护资源的类型。当您构建连接的应用程序时,您可以为它分配范围,并且它们在授权流程中包含在 OAuth 标记中。
所需的 Edition
| 适用于 Salesforce Classic 和 Lightning Experience |
| 适用于:所有版本 |
Oauth 标记
根据授权流,授权服务器可以向客户端提供这些 Oauth 标记。
| Oauth 标记 | 描述 |
|---|---|
| 授权代码 | 授权服务器创建授权代码,这是一个短期标记,并在成功身份验证后将其传递给客户端。客户端会将授权码发送到授权服务器,以获取访问标记,或刷新标记。 |
| 访问标记 | 客户端获得授权后,Salesforce 会向客户端发送访问标记。客户端将访问标记传递给资源服务器,以请求访问受保护的资源。在授予客户端访问权限之前,资源服务器以范围的形式验证访问标记和附加权限。 访问标记的使用寿命比授权代码长,通常为几分钟或数小时。当访问标记过期时,尝试使用它会失败,客户端必须通过使用刷新标记或重新初始化授权流来获取新的访问标记。 客户端必须能够保护访问标记免受传输层安全性(TLS 或 SSL)等协议的拦截。 要实施使用访问令牌的 OAuth 2.0 授权流,请将 收到访问标记后,客户端可以使用以下方法之一请求访问。
Salesforce 为每个连接的应用程序(客户端)和用户组合授予唯一的访问标记。但 Salesforce 可以在以下这些条件下向不同服务提供商签发相同访问标记:为确保不同服务提供商收到唯一访问标记,为每个服务提供商创建不同的连接的应用程序。
|
| 刷新标记 | 与密码一样,客户端可以重复使用刷新标记来访问资源服务器。当刷新标记过期或用户在客户端之外撤销它时,客户端通常通过从一开始就实施授权流来请求新的访问标记。 刷新标记的使用寿命并无具体期限,并在管理员配置的时间间隔内一直有效,直到已明确撤销。客户端可以存储刷新标记并使用它来获取新的访问标记。为了安全起见,客户端必须保护刷新标记免受未经授权的访问。 如果请求中包含 |
| ID 标记 | ID 标记是指包含验证用户属性的签署数据结构,其中包括用户的唯一标识符和标记的发布时间。此外,也会识别请求的客户端应用程序。Salesforce 可使用符合 OpenID Connect 规范的 ID 标记响应 OAuth 请求。 如果请求中包含这些参数,OAuth 2.0 用户代理和 OAuth 2.0 Web 服务器流都可以请求签名的 ID 标记。返回的标记是 JSON Web 令牌 (JWT)。
此处是使用用户代理流的 ID 标记的示例请求。 使用发布的公用密钥验证响应中的签名是有效的 Salesforce 签名。在 MyDomainName.my.salesforce.com/id/keys 上,该响应包括关于用于签名的公钥的 JSON 格式的信息。使用指定发布版本的具有正确 |
| 初始访问标记 | Salesforce 需要初始访问标记来授权动态客户端注册请求流。在配置 OAuth 2.0 连接的应用程序后,生成初始访问标记。 |
| 资产标记 | 为了高效的标记交换和设备与 Service Cloud 资产数据的自动链接,客户端可以实施 OAuth 2.0 设备流。在此流中,客户端可以将访问标记和操作者标记交换为资产标记。此流结合了资产标记发放和资产注册。 |
| 删除令牌 | 可用于撤销刷新令牌和关联访问令牌的标记。此令牌由 OauthToken 对象上的 DeleteToken 字段表示。要使用此令牌,请将其包含在对 OAuth 2.0 撤销端点的请求中,或者使用 Apex。请参阅撤销 Opaque Oauth 令牌。 |
OAuth 范围
可以将以下 Oauth 范围分配给连接的应用程序,以定义客户端可以访问的受保护资源的类型。
| 值 | 说明 |
|---|---|
对 Customer Data Platform 数据执行 ANSI SQL 查询 (cdp_query_api) |
允许代表用户对 Data Cloud 数据进行 ANSI SQL 查询。 |
管理 Pardot 服务 (pardot_api) |
允许代表用户访问 Marketing Cloud Account Engagement API 服务。管理 Account Engagement 中可访问服务的全部范围。(Pardot 现在是 Marketing Cloud Account Engagement。) |
管理 Customer Data Platform 简档数据 (cdp_profile_api) |
允许访问 Data Cloud REST API 数据。使用此范围管理简档记录。 |
访问连接 REST API 资源 (chatter_api) |
允许代表用户访问连接 REST API 资源。 |
管理 Customer Data Platform 摄取 API 数据 (cdp_ingest_api) |
允许访问 Data Cloud 摄取 API 数据。使用此范围在 Data Cloud 中上传和维护外部数据集。此范围封装在 JSON Web 令牌 (JWT) 中。 |
访问 Analytics REST API 图表地理数据资源 (eclair_api) |
允许访问 Analytics REST API 图表地理数据资源。 |
访问 Analytics REST API 资源 (wave_api) |
允许访问 Analytics REST API 资源。 |
通过 API 管理用户数据 (api) |
允许使用 API 访问当前登录的用户帐户,例如 REST API 和 Bulk API 2.0。此范围还包括允许访问连接 REST API 资源的 chatter_api。 |
访问自定义权限(custom_permissions) |
允许在与连接的应用程序关联的组织中访问自定义权限。此范围还会显示当前用户是否已启用每个权限。 |
访问身份 URL 服务 (id, profile, email, address, phone) |
允许访问身份 URL 服务。您可以分别请求profile、email、address或phone,以获得与使用id相同的结果,因为它们是同义词。 |
访问 Lightning 应用程序 (lightning) |
允许混合应用程序通过 OAuth 2.0 混合应用程序标记流和混合应用程序刷新标记流直接获得 Lightning 子会话。 |
访问内容资源 (content) |
允许混合应用程序通过 OAuth 2.0 混合应用程序标记流和混合应用程序刷新标记流直接获得内容子会话。 |
访问唯一用户标识符 (openid) |
允许访问当前登录用户的 OpenID Connect 应用程序唯一标识符。 在 OAuth 2.0 用户代理流和 OAuth 2.0 Web 服务器流中,使用 |
完全访问权限(full) |
允许登录用户访问所有数据,并包含所有其他范围。
|
随时执行请求(refresh_token, offline_access) |
当请求客户端有资格接收刷新标记时,允许返回刷新标记。通过刷新标记,应用程序可以在用户离线时与用户的数据进行交互。此令牌是请求offline_access的同义词。 |
访问 Visualforce 应用程序 (visualforce) |
仅允许访问客户创建的 Visualforce 页面。此范围不允许访问标准 Salesforce UI。 要允许混合应用程序直接获取 Visualforce 子会话,请将此范围包含在 OAuth 2.0 混合应用程序标记流或混合应用程序刷新标记流中。 |
通过 Web 浏览器管理用户数据 (web) |
允许在 Web 上使用access_token。该范围还包括visualforce,允许访问客户创建的 Visualforce 页面。 |
访问聊天机器人服务 (chatbot_api) |
允许访问 Einstein 机器人 API 服务。 |
| 访问无头注册 API (user_registration_api) | 允许访问无头注册流的 API。如果您设置了需要身份验证的流,您必须传递包含此范围的访问令牌。 |
访问无头忘记密码 API (forgot_password) |
允许访问无头注册流的 API。如果您设置了需要身份验证的流,您必须传递包含此范围的访问令牌。 |
访问所有 Data Cloud API 资源 (cdp_api) |
允许访问所有 Data Cloud API 资源。 |
访问 Salesforce API 平台 (sfap_api) |
允许访问 Salesforce API 平台,包括从 api.salesforce.com 或等效操作区端点访问的 API 服务。 |
| 访问交互 API 资源 (interaction_api) | 保留以供将来使用。 |
当客户端收到访问标记时,授权服务器还会在其响应中包括分配给连接的应用程序的范围。这些范围也与刷新标记一起存储。对于 JSON 或 SAML 不记名标记请求,请求将合并所有之前刷新的范围。
所有范围值都包含 id,您可以随时使用它访问身份 URL。
此示例请求包含api、id和web范围。范围值使用空格字符 %20 分隔。
https://MyDomainName.my.salesforce.com/services/oauth2/authorize?
response_type=token&
client_id=3MVG9lKcPoNINVBKV6EgVJiF.snSDwh6_2wSS7BrOhHGEJkC_&
redirect_uri=http%3A%2F%2F2www.example.org%2Fqa%2Fsecurity%2Foauth%2Fuseragent_flow_callback.jsp&
scope=api%20id%20web

