代理 365 CLI 需要在 Microsoft Entra ID 租户中注册自定义客户端应用程序,以便对代理标识蓝图进行身份验证和管理。
本文将该过程分为四个主要步骤:
- 注册应用
- 设置重定向URI
- 复制应用程序(客户端) ID
- 配置 API 权限需要管理员权限
如果遇到问题,请查看 故障排除 部分。
先决条件
在开始之前,请确保你可以访问Microsoft Entra管理门户,并在需要时具备授予许可所需的管理员角色之一。
注册该应用程序
默认情况下,租户中的 any 用户可以在 Microsoft Entra 管理中心 中注册应用程序。 然而, 租户管理员可以限制这一功能。 如果你无法注册应用,请联系你的管理员。
添加权限并授予同意
你需要其中一个管理员角色来配置API权限。
提示
没有管理员权限? 你可以自己完成第1-3步,然后请租户管理员完成第4步。 提供你第3步的 应用(客户端)ID ,以及 配置API权限 部分的链接。
提示
全局管理员可以跳过手动注册。 运行 a365 setup requirements ,如果在 Agent 365 CLI 租户中找不到应用,CLI 会提示你创建它并自动授予管理员同意。 在提示符处键入 C 以在单个步骤中创建应用。 如果使用此自动路径,可以跳过本部分中的步骤。
1. 注册应用
这些说明总结了 创建应用注册的完整说明。
选择 App 注册
选择“新建注册”
输入:
名称:为你的应用输入一个有意义的名称,例如
my-agent-app。 应用用户会看到此名称,你可以随时对其进行更改。 可以有多个具有相同名称的应用注册。提示
如果要使用免配置
a365 setup all --agent-name流,请按Agent 365 CLI精确命名应用程序。 CLI 会自动通过此已知显示名称查找客户端应用,因此无需将客户端 ID 复制到配置文件中。支持的账户类型: 仅限本组织目录中的账户 (单租户)
重定向 URI:选择 Public client/native (移动端和桌面端) 并进入
http://localhost:8400/
选择注册
CLI 总共需要三个重定向 URI。 CLI 会在您运行 a365 setup requirements 时自动添加缺失的部分。
| URI | Purpose |
|---|---|
http://localhost:8400/ |
Microsoft 身份验证库 (MSAL)交互式浏览器身份验证 |
http://localhost |
Microsoft Graph PowerShell SDK Connect-MgGraph |
ms-appx-web://Microsoft.AAD.BrokerPlugin/{client-id} |
使用 Web 帐户管理器 (WAM) |
有关详细信息 ,请参阅 CLI 自动配置的内容 。
2. 设置重定向 URI
- 进入 概览 ,复制 应用程序(客户端)ID 值。
- 进入认证(预览),选择添加重定向URI。
- 选择 移动端和桌面应用 ,并将值设为
ms-appx-web://Microsoft.AAD.BrokerPlugin/{client-id},其中{client-id}是你复制的 应用程序(客户端 ID) 值。 - 选择 配置 以添加该值。
3. 复制应用程序(客户端) ID
从应用 的概览 页面,复制应用程序 (客户端)ID ,格式为GUID。 运行 a365 setup all 或手动创建 a365.config.json时,请使用此值。
提示
不要将此值与 对象 ID 混淆 - 需要 应用程序(客户端)ID。
如果在步骤 1 中命名应用 Agent 365 CLI ,则可以在使用 a365 setup all --agent-name时跳过此步骤。 CLI 通过显示名称自动解析客户端 ID。
4. 配置 API 权限
重要
你需要管理员权限才能完成这一步。 如果你是没有管理员权限的开发者,把第3步的应用(客户端)ID发给租户管理员,让他们完成这一步。
注意
截至 2025 年 12 月,AgentIdentityBlueprint.*、AgentInstance.* 和 AgentIdentity.* 权限是 beta API,在Microsoft Entra 管理中心中可能不可见。 如果这些权限在租户中变得普遍可用,你可以使用选项A获得所有权限。
选择合适的方法:
- Option A:如果“beta 权限”可见,则使用 Microsoft Entra 管理中心管理所有权限。
- Option B:使用Microsoft 图形 API添加所有权限(如果 beta 权限不可见,建议)
选项 A:Microsoft Entra 管理中心(标准方法)
如果在租户中可以看到 beta 权限,请使用此方法。
在应用注册中,转到 API 权限。
选择添加权限>Microsoft Graph>委托权限。
重要
必须使用 委派权限 (而不是 应用程序权限)。 CLI是交互式认证的——你登录,它会代表你行动。 若要了解详细信息,请参阅 “权限类型错误”。
逐个添加以下 13 个权限:
许可 Purpose AgentIdentityBlueprintPrincipal.Create创建 Agent Blueprint 服务主体(beta API) AgentIdentityBlueprint.ReadWrite.All管理代理蓝图配置(测试版API) AgentIdentityBlueprint.UpdateAuthProperties.AllUpdate Agent Blueprint 可继承权限(beta API) AgentIdentityBlueprint.AddRemoveCreds.All在蓝图上添加或删除客户端机密和联合标识凭据(beta API) AgentIdentityBlueprint.DeleteRestore.All清理期间删除代理蓝图应用程序(beta API) AgentInstance.ReadWrite.All通过代理注册表 API 注册和管理代理实例(beta API) AgentIdentity.Create.All从蓝图创建代理标识 (beta API) AgentIdentity.DeleteRestore.All在清理期间删除代理身份服务主体(测试版 API) AgentIdentity.Read.All读取代理标识数据(beta API) AgentRegistration.ReadWrite.All读取和写入所有代理注册信息 DelegatedPermissionGrant.ReadWrite.All授予代理蓝图权限 Directory.Read.All读取目录数据进行验证 User.Read读取用于蓝图所有者分配的已登录用户配置文件 注意
AgentRegistration.ReadWrite.All是代理设置所必需的。 CLI 通过.default无提示地获取此权限,Agent 365 CLI 验证器不会显式检查这一点,但它必须存在于您的应用注册中并已经获得管理员同意。对于每项许可:
- 在搜索框中输入权限名称(例如,
AgentIdentityBlueprint.ReadWrite.All。 - 勾选权限旁边的复选框。
- 选择添加权限。
- 对所有 13 个权限重复此操作。
- 在搜索框中输入权限名称(例如,
选择 授予[您的租户]的管理员同意。
- 为什么需要这一点? 代理标识蓝图是多个用户和应用程序可以引用的租户范围资源。 如果没有租户全体同意,CLI在认证过程中会失败。
- 如果失败了怎么办? 你需要应用管理员、云应用管理员或全局管理员角色。 向你的租户管理员求助。
验证所有权限在 状态 下显示为绿色勾选标记。
如果 beta 权限(AgentIdentityBlueprint.*)不可见,请转到 选项 B。
选项 B:Microsoft 图形 API(适用于 Beta 权限)
如果 Microsoft Entra 管理中心未显示 AgentIdentityBlueprint.* 权限,请使用此方法。
Warning
如果使用此 API 方法,之后不要使用Microsoft Entra 管理中心的“授予管理员同意”按钮。 API 方法会自动授予管理员同意,并使用Microsoft Entra管理中心按钮删除 beta 权限。 更多信息请参见 “Beta权限消失”。
打开 图谱浏览器。
使用您的管理员账户(应用管理员或云应用管理员)登录。
使用 图形 API 授予管理员同意。 若要完成此步骤,需要:
- 服务负责人身份证。 你需要一个
SP_OBJECT_ID可变值。 - 图形资源ID。 你需要一个
GRAPH_RESOURCE_ID可变值。 - 通过使用 oAuth2PermissionGrant 资源类型和
SP_OBJECT_IDGRAPH_RESOURCE_ID变量值创建(或更新)委托权限。
- 服务负责人身份证。 你需要一个
请利用以下章节中的信息完成这些步骤。
获取你的服务负责人身份证
服务主体(Service Principal)是你应用在租户中的身份。 你需要先获得它,才能通过API授予权限。
将Graph Explorer方法设置为 GET ,并使用该URL。 将
<YOUR_CLIENT_APP_ID>替换为步骤3中的实际应用客户端ID:复制应用(客户端)ID。https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '<YOUR_CLIENT_APP_ID>'&$select=id选择“运行查询”。
如果查询成功,返回的值就是你的
SP_OBJECT_ID。如果查询失败且出现权限错误,选择修改 权限 标签,同意所需权限,然后再次选择 运行查询 。 返回的值是你的
SP_OBJECT_ID。如果查询返回空结果(
"value": []),则通过以下步骤创建服务主体:设置方法为 POST ,并使用这个URL:
https://graph.microsoft.com/v1.0/servicePrincipals请求正文(将
YOUR_CLIENT_APP_ID替换为您的应用程序客户端实际ID):{ "appId": "YOUR_CLIENT_APP_ID" }选择“运行查询”。 你应该会得到
201 Created回复。 返回的id值是你的SP_OBJECT_ID。
获取你的Graph资源 ID
将图探索器方法设置为 GET ,并使用以下URL:
https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '00000003-0000-0000-c000-000000000000'&$select=id选择“运行查询”。
- 如果查询成功,复制该
id值。 这个值就是你的GRAPH_RESOURCE_ID。 - 如果查询失败且出现权限错误,选择修改 权限 标签,同意所需权限,然后再次选择 运行查询 。 复制
id值。 这个值就是你的GRAPH_RESOURCE_ID。
- 如果查询成功,复制该
创建委托权限
此 API 调用为租户范围内的所有 13 个权限授予管理员同意,包括 Microsoft Entra 管理中心中不可见的 beta 权限。
将图资源管理器方法设置为 POST ,并使用以下URL和请求主体:
https://graph.microsoft.com/v1.0/oauth2PermissionGrants请求正文:
{ "clientId": "<SP_OBJECT_ID>", "consentType": "AllPrincipals", "principalId": null, "resourceId": "<GRAPH_RESOURCE_ID>", "scope": "AgentIdentityBlueprintPrincipal.Create AgentIdentityBlueprint.ReadWrite.All AgentIdentityBlueprint.UpdateAuthProperties.All AgentIdentityBlueprint.AddRemoveCreds.All AgentIdentityBlueprint.DeleteRestore.All AgentInstance.ReadWrite.All AgentIdentity.Create.All AgentIdentity.DeleteRestore.All AgentIdentity.Read.All AgentRegistration.ReadWrite.All DelegatedPermissionGrant.ReadWrite.All Directory.Read.All User.Read" }选择“运行查询”。
-
如果你得到
201 Created响应:成功!scope响应中的字段显示所有 13 个权限名称。 大功告成。 -
如果查询因权限错误失败 (很可能
DelegatedPermissionGrant.ReadWrite.All),选择 修改权限 标签,同意 ,DelegatedPermissionGrant.ReadWrite.All然后再次选择 运行查询 。 -
如果出现错误
Request_MultipleObjectsWithSameKeyValue:资助已经存在。 也许有人之前添加了权限。 请参见以下 更新委托的权限。
-
如果你得到
Warning
consentType: "AllPrincipals"请求中POST已经授予了租户全体管理员的同意。
在使用此 API 方法后,请勿在 Microsoft Entra 管理中心选择“授予管理员同意”,这样做会删除您的 beta 权限,因为 Microsoft Entra 管理中心无法看到 beta 权限,并且仅以可见权限覆盖 API 授予的许可。
更新委派权限
当你按照Request_MultipleObjectsWithSameKeyValue的步骤出现错误时,请使用以下步骤更新委托权限。
将图探索器方法设置为 GET ,并使用以下URL:
https://graph.microsoft.com/v1.0/oauth2PermissionGrants?$filter=clientId eq 'SP_OBJECT_ID_FROM_ABOVE'选择“运行查询”。 复制响应中的
id值。 该值为YOUR_GRANT_ID。将图探索器方法设置为PATCH并使用此 URL
YOUR_GRANT_ID。https://graph.microsoft.com/v1.0/oauth2PermissionGrants/<YOUR_GRANT_ID>请求正文:
{ "scope": "AgentIdentityBlueprintPrincipal.Create AgentIdentityBlueprint.ReadWrite.All AgentIdentityBlueprint.UpdateAuthProperties.All AgentIdentityBlueprint.AddRemoveCreds.All AgentIdentityBlueprint.DeleteRestore.All AgentInstance.ReadWrite.All AgentIdentity.Create.All AgentIdentity.DeleteRestore.All AgentIdentity.Read.All AgentRegistration.ReadWrite.All DelegatedPermissionGrant.ReadWrite.All Directory.Read.All User.Read" }选择“运行查询”。 应获得一个包含所有 13 个权限的
200 OK响应,并在scope字段中显示。
安全最佳做法
请查看这些指南,以确保您的应用注册安全且合规。
建议做法:
- 使用单一租户注册。
- 只授予所需的委派权限。
- 定期审核权限。
- 不需要时就移除应用。
不要:
- 授予应用程序权限。 只使用委托。
- 公开客户ID。
- 授予其他不必要的许可。
- 把这个应用用在其他用途上。
CLI 自动配置的内容
运行 a365 setup requirements时,CLI 会验证应用注册,可能需要进行更改。 在应用任何更改之前,CLI 会显示摘要并要求确认:
WARNING: The CLI needs to make the following changes to your app registration (<app-id>):
- Add redirect URI(s): http://localhost
- Enable 'Allow public client flows' (isFallbackPublicClient = true)
Do you want to proceed? (y/N):
若要跳过确认提示(例如,在 CI 环境中),请使用标志 --yes :
a365 setup requirements --yes
下表描述了 CLI 可能做出的每个更改:
| 更改 | 原因 |
|---|---|
添加重定向 URI http://localhost |
Microsoft Graph PowerShell SDK 需要此 URI 进行浏览器身份验证。 如果没有它,OAuth2 授权操作将退回到一个缺少所需委派权限的令牌,并以403错误失败。 |
添加重定向 URI http://localhost:8400/ |
MSAL 需要此 URI 进行交互式浏览器身份验证。 |
添加重定向 URI ms-appx-web://Microsoft.AAD.BrokerPlugin/{id} |
必需用于 Web 帐户管理器(WAM),它是 Windows 操作系统的身份验证代理。 详细了解 如何获取设备绑定令牌。 |
| 启用“允许公共客户端流” | 在 macOS、Linux、适用于 Linux 的 Windows 子系统(WSL)、无头环境中需要设备代码身份验证回退,并在 Windows 上用作条件访问策略回退。 |
| 向应用注册添加缺少的权限 | 在 CLI 更新后,使应用注册与新所需的权限保持同步。 |
| 扩展管理员的同意授权 | 扩展现有的 OAuth2 权限授予以包含任何新预配的权限。 需要已对 DelegatedPermissionGrant.ReadWrite.All 授予同意。 |
如果拒绝提示,CLI 不会修改应用注册。 如果 CLI 需要更改才能正常运行,则可以在 Microsoft Entra 管理中心 中手动配置这些更改,或使用 --yes 重新运行它们。
后续步骤
注册自定义客户端应用后,将其与代理 365 CLI 配合使用以完成代理 365 设置:
故障排除
本节介绍如何排查自定义客户端应用注册的错误。
提示
Agent 365 故障排除指南 包含高层次的故障排除建议、最佳实践以及针对 Agent 365 开发生命周期各阶段的故障排除内容链接。
CLI验证在配置过程中失败
症状: 运行 a365 setup 或 a365 setup requirements 会失败,并产生关于自定义客户端应用的验证错误。
解决方案: 请使用这份清单来验证您的应用注册是否正确:
# Run requirements validation to see validation messages
a365 setup requirements
预期结果: CLI显示 Custom client app validation successful。
如果没有得到预期结果,请验证以下每项检查:
| 检查 | 如何验证 | 修复 |
|---|---|---|
| ✅ 使用了正确的身份证 | 你复制的是 应用程序(客户端)ID (不是对象ID) | 转到 Microsoft Entra 管理中心中的应用程序概述 |
| ✅ 授权授权 | 权限显示类型:API权限委托 | 参见 错误的权限类型 |
| ✅ 所有权限已添加 | 请参见下方所有权限 | 请再次执行 第四步 |
| ✅ 已授予管理员同意 | 所有设备在状态下都显示绿色勾选 | 参见 错误授予的管理员同意 |
必须委派权限:
-
AgentIdentityBlueprintPrincipal.Create[测试版] -
AgentIdentityBlueprint.ReadWrite.All[测试版] -
AgentIdentityBlueprint.UpdateAuthProperties.All[测试版] -
AgentIdentityBlueprint.AddRemoveCreds.All[测试版] -
AgentIdentityBlueprint.DeleteRestore.All[测试版] -
AgentInstance.ReadWrite.All[测试版] -
AgentIdentity.Create.All[测试版] -
AgentIdentity.DeleteRestore.All[测试版] -
AgentIdentity.Read.All[测试版] AgentRegistration.ReadWrite.AllDelegatedPermissionGrant.ReadWrite.AllDirectory.Read.AllUser.Read
管理员同意被错误地授予
症状: 即使添加了权限,验证也会失败。
根本原因:您未授予管理员同意,或授予方式不正确。
Solution: 在 Microsoft Entra 管理中心 的应用注册中,转到 API 权限并选择授予 [你的租户]的管理员同意。 验证所有权限在 状态 下显示为绿色勾选标记。
错误的权限类型
症状:CLI因认证错误或权限拒绝错误而失败。
根本原因:你添加了 应用程序权限 而不是 委托权限。
本表描述了不同类型的权限。
| 权限类型 | 何时使用 | Agent 365 CLI 如何使用它 |
|---|---|---|
| 委托 (“范围”) | 用户交互式登录 | Agent 365 CLI 就是这样 ——你登录,CLI 代表你行动 |
| 应用(“角色”) | 服务在无用户情况下运行 | 不要使用 - 仅用于后台服务/守护进程 |
为什么选择委派?
- 你通过浏览器进行交互式登录
- CLI会以你的身份执行操作(审计轨迹显示你的身份)
- 更安全——受限于你的实际权限
- 确保问责和合规
解决方案;
- 转到Microsoft Entra 管理中心>应用注册> 您的应用>API 权限
- 移除所有应用权限。 这些权限显示在类型列中的应用程序。
- 添加与 委托 权限相同的权限。
- 再次授予管理员授权。
经过Microsoft Entra管理中心的管理员许可后,Beta权限不再可用。
症状:你使用了选项 B:Microsoft 图形 API(用于测试版权限)来添加测试版权限,但在 Microsoft Entra 管理中心中选择授予管理员同意后,这些权限就会消失。
根本原因:Microsoft Entra 管理中心在 UI 中不显示 beta 权限。 当你选择 “授予管理员同意”时,门户只授予 可见 权限的同意,并覆盖API授予的同意。
原因:
- 使用 图形 API (选项 B)添加所有 13 个权限,包括 beta 权限。
- API
consentType: "AllPrincipals"调用已经授予了全租户管理员的权限。 - 您前往 Microsoft Entra 管理中心后,只能看到部分权限,因为 beta 权限在门户中不可见。
- 你选择了 授予管理员同意 ,以为你需要这样做。
- Microsoft Entra 管理中心将用仅有的可见权限覆盖你的 API 授予的许可。
- Beta 权限现已删除。
解决方案;
- 不要在 API 方法后使用 Microsoft Entra 管理中心的管理员同意:API 方法已授予管理员同意。
- 如果意外删除 beta 权限,请重新运行 Option B 步骤 3(使用 图形 API 授予管理员同意)以还原它们。 如果出现
Request_MultipleObjectsWithSameKeyValue错误,请按照步骤更新 委派权限。 - 若要验证是否列出了所有 13 个权限,请检查
scope或POST响应中的PATCH字段。
验证时找不到应用
症状: CLI报告 Application not found 或 Invalid client ID 错误。
Solution:
确认你复制的是GUID格式的 应用程序(客户端)ID ,而不是 对象ID:
- 转到 Microsoft Entra 管理中心>应用注册>您的应用程序>概览
- 复制应用(客户端)ID 下的值
- 格式应为:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
确认你的租户中是否存在该应用:
# Sign in to the correct tenant az login # List your app registrations az ad app list --display-name "<The display name of your app>"