- 入门指南
- 身份验证
- 身份验证方法
- 外部应用程序 (OAuth)
- 其他 API 访问方法
- 作用域和权限
- 平台管理 API
Test Cloud API 指南
作为致力于将 UiPath 产品与外部应用程序集成的开发者,您负责执行诸如管理作用域更改、管理访问令牌和刷新令牌以及维护外部应用程序和 UiPath 资源之间的集成等的任务。以下指南将引导您完成这些操作。
OAuth 提供了一系列库,您可以利用这些库来简化身份验证、授权、委派和保护 API 调用。您可以直接从官方 OAuth 网站访问这些资源。
先决条件
组织管理员在 UiPath 中注册了您的外部应用程序后,作为开发者,您将需要获取注册详细信息,以便使用 UiPath 资源对外部应用程序进行身份验证。
- “应用程序类型”和“应用程序 ID” 。如果您使用的是机密应用程序,则还需要应用程序密码。它们用于通过 UiPath 的 Identity Server(用于访问 UiPath 资源的授权服务器,支持 OAuth 2.0 框架)对您的应用程序进行身份验证。
- Additionally, you need to know the external app scopes, which defines what resources your external app can access in UiPath. This includes both the resource specification (such as Assets or Processes) and the permission level (such as read, write, or edit).
对外部应用程序进行身份验证和授权
在注册外部应用程序后,您必须为外部应用程序实施适当的授权机制,并提供适当的授权类型,以便外部应用程序可以检索访问令牌。
在此流程中,通过向 Identity Server 提供外部应用程序的作用域和已注册应用程序的凭据(应用程序 ID,以及机密应用程序的应用程序密码)来请求访问令牌。如果凭据有效,Identity Server 将通过发出授权代码进行响应,该代码将用于生成访问令牌。
要使用的授权类型
| 应用程序类型 | 范围 | 要求的授权类型 |
|---|---|---|
| 机密 | 应用程序 | 客户端凭据 |
| 机密 | 用户 | 授权代码 |
| 机密 | 应用程序和用户 | 客户端凭据和授权代码 |
| 非机密 | 用户 | 使用 PKCE 的授权代码 |
当用户和应用程序作用域内的作用域名称相同时(如在 Orchestrator 中),您使用的授予类型将决定是在用户作用域还是应用程序作用域下调用资源。
声明作用域
管理员为应用程序定义的作用域决定了应用程序可以获得的最高访问级别。作为开发者,如果您请求的访问权限超出此预定义的作用域,您的请求将失败。因此,请务必确保您的请求在管理员定义的作用域内。
在管理员级别,应用程序的权限可以是:
- 组织范围内的权限:默认情况下,注册外部应用程序后,根据作用域集,该应用程序拥有组织范围内对资源的访问权限。
- 精细权限:对于更精细的权限设置,组织管理员可以在 Orchestrator 中,在租户或文件夹级别将角色分配给外部应用程序,但这仅适用于机密应用程序。
在开发者级别,作用域的声明方式如下:
- 组织范围内的权限:当您在令牌请求中声明显式指定的作用域(例如
OR.Machines.View时,这意味着应用程序正在请求组织范围内的访问权限。 - 精细权限:要为应用程序提供精细访问权限,您必须在令牌请求中声明
OR.Default。OR.Default作用类似于通配符作用域,为您的应用程序提供精细的访问权限,具体取决于应用程序在特定租户或文件夹中获分配的角色。
例如,假设您希望应用程序在组织范围内具有查看所有计算机的访问权限,并在定义的租户和文件夹中具有更细化的专属权限。在这种情况下,您可以将作用域声明为 OR.Machines.View 和 OR.Default。此合并声明允许您的外部应用程序既在组织范围内运行,又在特定的 Orchestrator 租户或文件夹中运行。
查看资源的 API 文档中的端点,以获取所需的作用域值。例如:
具有用户作用域的机密应用程序(授权代码流程)
对于具有用户作用域的机密外部应用程序,您可以对 Identity Server 执行授权代码流程。
该图显示了 OAuth 授权代码流程。客户端从 Identity Server 请求授权。然后,系统会提示用户登录。成功后,Identity Server 会提供授权代码。客户端使用此代码和客户端密码来检索访问令牌。使用经过验证的令牌,即可访问 API 资源。
有关使用授权代码的 OAuth 流程的详细信息,请参阅 RFC 6749 文档。
如果您使用的是 Postman 或类似工具,请使用内容类型application/x-www-form-urlencoded
-
外部应用程序向 Identity Server 授权端点
https://cloud.uipath.com/{organizationName}/identity_/connect/authorize?发送一个授权请求,以获取授权代码:response_type=code&acr_values={value}&client_id={app_id}&scope={scopes}&redirect_uri={redirect_url}response_type=code&acr_values={value}&client_id={app_id}&scope={scopes}&redirect_uri={redirect_url}选项
描述
acr_values允许 Identity Server 根据用户所属的组织应用身份验证策略。可以采用不同的值:
-
acr_values=tenant:{target Organization GlobalId} - 组织 ID 用作 ACR 值。
-
acr_values=tenantName:{target organization name} - 组织名称充当 ACR 值。
client_id指定在注册期间分配给应用程序的唯一标识符。
必须包含应用程序 ID(由管理员提供)。
client_secret指定机密应用程序在注册时提供给您的机密信息(如密码)。当向 Identity Server 发出请求时,此字段与 client_id 一起用于对应用程序进行身份验证。
必须包含应用程序密码(由管理员提供)。
scope指定应用程序请求的作用域,以空格分隔;例如:OR.Machines.View OR.Default。
-
使用“OR.Default”可在特定租户或文件夹中授予受控的自定义访问权限。应用程序获得的权限取决于管理员将应用程序分配在哪些租户或文件夹。
-
使用 OR.Machines.View 等显式作用域在组织范围内授予对某些资源的广泛访问权限。
redirect_uri指定 Identity Server 在授予授权代码后重定向授权请求时使用的 URL。
-
-
用户必须登录到,以对授权请求进行身份验证。
如果出现以下情况,请求将失败:
- 用户不在已注册外部应用程序的组织中
- 对于某些资源,已登录的用户对请求的范围没有所需要的权限。
-
外部应用程序接收授权代码。 您只能使用一次授权代码。
示例授权请求重定向:
{redirect_url}?code={authorization_code}&scope={scopes} -
外部应用程序使用授权代码和身份验证详细信息(
client_id和client_secret)从 UiPath™ Identity Server 请求访问令牌。这些请求包含在对令牌端点https://cloud.uipath.com/{organizationName}/identity_/connect/tokenPOST 请求的正文中。grant_type=authorization_code&code={authorization_code}&redirect_uri={redirect_url}&client_id={app_id}&client_secret={app_secret}grant_type=authorization_code&code={authorization_code}&redirect_uri={redirect_url}&client_id={app_id}&client_secret={app_secret} -
外部应用程序收到包含访问令牌的响应,例如:
{ "access_token":"{access_token}", "expires_in":3600, "token_type":"Bearer", "scope":"{scopes}" }{ "access_token":"{access_token}", "expires_in":3600, "token_type":"Bearer", "scope":"{scopes}" }应用程序现在可以使用访问令牌来访问用户资源,直到令牌过期(一小时)。
具有用户作用域的非机密应用程序(具有 PKCE 流程的授权代码)
对于具有用户作用域的非机密应用程序,您可以使用 PKCE 流程执行授权代码。有关使用包含 PKCE 的授权代码的 OAuth 流程的详细信息,请参阅 RFC 7636 文档。
使用此授予类型的流程如下所示:
-
外部应用程序向
https://cloud.uipath.com/{organizationName}/identity_/connect/authorize?端点发送一个授权请求,以获取授权代码:response_type=code&client_id={app_id}&scope={scopes}&redirect_uri={redirect_url}&code_challenge={cryptographically-random string from code_verifier}&code_challenge_method=S256response_type=code&client_id={app_id}&scope={scopes}&redirect_uri={redirect_url}&code_challenge={cryptographically-random string from code_verifier}&code_challenge_method=S256选项 描述 client_id指定在注册期间分配给应用程序的唯一标识符。必须包含应用程序 ID (由管理员提供)。 scope指定应用程序请求的作用域,以空格分隔;例如 OR.Machines.View。redirect_uri指定 UiPath Identity Server 在授予授权代码后重定向授权请求时使用的 URL。 code_challenge_method指定用于对 code_challenge的code_verifier进行编码的方法。此字段的值必须为S256 ,这意味着应使用 SHA256 散列code_verifier和 base64url 编码,以创建code_challenge。code_challenge从 code_verifier派生的加密随机字符串,用于将授权请求连接到令牌请求。 您必须使用代码验证程序算法来生成代码质询。您也可以创建自己的算法,但前提是它必须符合 rfc7636 标准。 -
在发送至
https://{identity_baseURL}/connect/token的 POST 令牌请求中,您需要在请求正文中包含code_verifier(用于生成code_challenge的原始字符串)。grant_type=authorization_code&code={authorization_code}&redirect_uri={redirect_url}&client_id={app_id}&code_verifier={code_verifier}grant_type=authorization_code&code={authorization_code}&redirect_uri={redirect_url}&client_id={app_id}&code_verifier={code_verifier}响应包括访问令牌,应用程序可使用该访问令牌来访问用户资源,直到令牌过期(一小时)。
具有应用程序作用域的机密应用程序(客户端凭据流程)
具有应用程序作用域的机密应用程序根据 UiPath Identity Server 执行客户端凭据流程。
该图显示了 OAuth 客户端凭据流程。客户端将凭据发送到 Identity Server 并接收访问令牌。使用经过验证的令牌,可以访问 API 资源。
有关使用客户端凭据的 OAuth 流程的详细信息,请参阅 RFC 6749 文档。
使用此授予类型的流程如下所示:
-
外部应用程序通过向 Identity Server 令牌端点发送包含
client_id和client_secret的 POST 请求来请求访问令牌:https://cloud.uipath.com/{organizationName}/identity_/connect/token:grant_type=client_credentials&client_id={app_id}&client_secret={app_secret}&scope={scopes}grant_type=client_credentials&client_id={app_id}&client_secret={app_secret}&scope={scopes}字段
描述
client_id指定在注册期间分配给应用程序的唯一标识符。
必须包含应用程序 ID(由管理员提供)。
client_secret指定机密应用程序在注册时提供给您的机密信息(如密码)。当向 Identity Server 发出请求时,此字段与 client_id一起用于对应用程序进行身份验证。必须包含应用程序密码(由管理员提供)。
scope指定应用程序请求的作用域,以空格分隔;例如 OR.Machines.View OR.Default。- 使用
OR.Default在特定租户或文件夹中授予受控的自定义访问权限。应用程序获得的实际权限取决于管理员将应用程序分配在哪些租户或文件夹中。 - 使用
OR.Machines.View等显式作用域在组织范围内授予对某些资源的广泛访问权限。
- 使用
-
外部应用程序收到包含访问令牌的响应:
{ "access_token":"{access_token}", "expires_in":3600, "token_type":"Bearer", "scope":"{scopes}" }{ "access_token":"{access_token}", "expires_in":3600, "token_type":"Bearer", "scope":"{scopes}" }应用程序现在可以使用访问令牌来访问用户资源,直到令牌过期(一小时)。
使用访问令牌
应用程序获得访问令牌后,它可以使用令牌来访问允许的资源(仅限于选定的作用域),直到令牌过期(一小时)。
这是向 odata/Machines API 发出的一个示例请求,该请求在“授权”标头中使用访问令牌,其中访问令牌的作用域中包含 OR.Machines 作用域。
curl -X GET "https://cloud.uipath.com/{organizationName}/{tenantName}/orchestrator_/odata/Machines"
-H "Authorization: Bearer {access_token}" -H "accept: application/json"
curl -X GET "https://cloud.uipath.com/{organizationName}/{tenantName}/orchestrator_/odata/Machines"
-H "Authorization: Bearer {access_token}" -H "accept: application/json"
获取刷新令牌
Access tokens expire in one hour. The external application can get a new access token without user interaction by exchanging a refresh token for it. Both confidential and non-confidential external applications can request a refresh token. However, the client credentials flow does not support refresh tokens.
In the client credentials flow, access tokens are granted directly without refresh tokens. When clients need a new token, they must reauthenticate using their credentials.
刷新令牌也仅能使用一次,并且会在 60 天后过期。
要请求刷新令牌,须在授权请求的 scope 参数中包含 offline_access,以便在令牌请求中使用授权代码来获取刷新令牌。
获取刷新令牌
向令牌端点发送包含授权代码的POST请求
https://cloud.uipath.com/{organizationName}/identity_/connect/token。
如果您使用的是 Postman 或类似工具,请使用内容类型 application/x-www-form-urlencoded。
该请求将返回一个新的访问令牌和一个刷新令牌:
{
"access_token": "{access_token}",
"expires_in": 3600,
"token_type": "Bearer",
"refresh_token": "{refresh_token}",
"scope": "OR.Machines OR.Robots offline_access"
}
{
"access_token": "{access_token}",
"expires_in": 3600,
"token_type": "Bearer",
"refresh_token": "{refresh_token}",
"scope": "OR.Machines OR.Robots offline_access"
}
获取新的刷新令牌和新的访问令牌
使用refresh_token授权类型向令牌端点https://cloud.uipath.com/{organizationName}/identity_/connect/token发送POST请求。
如果您使用的是 Postman 或类似工具,请使用内容类型 application/x-www-form-urlencoded。
{
"grant_type": "refresh_token",
"client_id": "{app_id}",
"client_secret": "{app_secret}",
"refresh_token": "{existing_refresh_token}"
}
{
"grant_type": "refresh_token",
"client_id": "{app_id}",
"client_secret": "{app_secret}",
"refresh_token": "{existing_refresh_token}"
}
如果外部应用程序是非机密应用程序,并且使用具有 PKCE 授权类型的授权代码,请从请求正文中删除 client_secret 参数。
该响应将返回一个新的访问令牌和一个新的刷新令牌。
现有刷新令牌在使用后不再有效,因此请确保使用收到的新刷新令牌。
UiPath™ Identity Server 端点
如果您使用的是 Postman 或类似工具,请为发送至 Identity Server 端点的请求使用内容类型 application/x-www-form-urlencoded。如果您以编程方式发出请求,则不需要这样做。
| 身份服务器层 | Endpoint | 描述 |
|---|---|---|
| 发现 | https://cloud.uipath.com/{organizationName}/identity_/.well-known/openid-configuration | 使用此端点检索有关 Identity Server 实例的元数据。 |
| 授权 | https://cloud.uipath.com/{organizationName}/identity_/connect/authorize | 使用此端点通过浏览器请求令牌或授权代码。 此流程包括对最终用户的身份验证和(可选)同意。 |
| 令牌 | https://cloud.uipath.com/{organizationName}/identity_/connect/token | 使用此端点以编程方式请求令牌。请注意,对于此端点,内容类型必须为application/x-www-form-urlencoded 。 |