概述
本文档介绍如何基于阿里云 IDaaS Agent 身份安全能力,构建以 Agent 为中心的身份与访问管理体系。通过本方案,您可以实现 Agent 数字身份的安全管理、访问凭证(API Key、OAuth Token 等)的集中托管,以及 Agent 代表用户或自身安全地访问大模型、第三方服务及企业内部服务。
场景描述
随着 AI Agent 技术的广泛应用,Agent 需要安全地访问多种外部服务:
-
大模型服务:Agent 需要调用大模型完成 AI 推理,本示例以百炼大模型为例。
-
第三方服务:Agent 需要访问第三方服务,本示例以高德 MCP Server 为例。
-
企业内部服务:Agent 需要访问企业内部服务,本示例以部署在函数计算上的服务为例。
传统方式将凭证硬编码在代码中或存储在配置文件里,存在凭证泄露、难以轮换等安全风险。本方案通过 IDaaS 实现:
-
凭证集中托管到 IDaaS,Agent 运行时动态获取。
-
基于 M2M(Machine to Machine)身份认证,确保只有授权的 Agent 可获取凭证。
-
支持 Access Token 动态签发,实现细粒度访问控制。
方案架构
工作流程
工作流程说明
|
阶段 |
说明 |
关键凭证 |
|
用户身份认证 |
用户通过 SSO 登录获取访问 Agent 的 Access Token (AT_u) |
AT_u (aud:Agent 的受众标识, scope:的权限标识) |
|
用户身份校验 |
Agent 校验 AT_u 的有效性和权限 |
IDaaS JWKS 公钥 |
|
Agent 初始化 |
Agent 以自身 M2M 应用身份从 IDaaS 动态获取各类凭据 |
大模型 API Key、第三方服务 API Key、企业服务 Access Token(AT_s,aud:企业服务应用的受众标识,scope:企业服务应用的权限标识) |
|
AI 请求处理 |
Agent 调用 LLM 和各类 Tool 完成 AI 请求 |
各类凭据动态使用 |
前提条件
-
已在百炼平台创建具有百炼模型调用权限的 API 密钥。
-
已在百炼平台的 MCP 广场添加高德地图。
-
已开通阿里云函数计算服务。
-
已在 IDaaS 中完成 Agent 身份安全配置,完成了 Agent 节点、客户端节点、大模型节点(使用百炼 API key)、三方服务节点(使用百炼 API key)和企业服务节点。详细配置可参考Agent 身份安全配置指导。
配置步骤
步骤一:获取 Agent 示例代码
使用 git 克隆或直接下载Agent 示例代码。在本地打开终端,执行以下命令克隆示例代码。
git clone https://github.com/cloud-idaas/idaas-java-agent-id-demo.git
步骤二:配置 IDaaS SDK
-
生成 SDK 配置
-
进入 IDaaS EIAM 控制台。
-
在左侧导航栏,选择 Agent 身份安全。
-
进入 IDaaS 实例控制台,在左侧导航栏中选择 Agent 身份安全。
-
定位目标 Agent,单击操作列下的编辑。
-
单击 Agent 节点。
-
认证类型选择Client Secret凭证 ,单击生成SDK配置。
-
复制配置内容。
详细的配置说明,可参见环境准备。
-
-
配置 SDK 文件
将 SDK 配置内容粘贴到 Agent 示例代码目录的两个文件中:
-
src/main/resources/cloud_idaas_config_for_computer.json(本地部署使用) -
src/main/resources/cloud_idaas_config_for_agent_run.json(AgentRun 部署使用)
-
步骤三:部署企业服务(函数计算)
3.1 部署函数计算
-
登录函数计算 FC 控制台。
-
在左侧导航栏中选择 函数管理 > 函数列表。
-
选择 Web 函数页签,单击创建 Web 函数。
-
运行环境选择 自定义运行时 > Java > Java 17。
-
代码上传方式选择使用示例代码,其他配置保持默认。
-
完成函数创建。
3.2 配置 JWT 认证
为函数的 HTTP 触发器配置 JWT 认证,确保只有持有 IDaaS 签发的 Access Token 才能访问企业服务。
-
进入 IDaaS 实例控制台,单击Agent 身份安全配置指导中创建的企业服务节点。
-
复制通用配置下的OIDC发现端点,在浏览器中打开,复制验签公钥端点(即
jwks_uri字段的值)。 -
在浏览器中访问验签公钥端点,复制全部返回内容。
-
进入函数计算控制台,在函数列表中找到上一步中创建的函数,单击操作列下的配置。
-
在函数详情页签中单击函数拓扑图中的触发器,认证方式选择JWT 认证。
-
将验签公钥端点返回的内容填入 JWKS 配置项中。
-
在 JWT Token 配置中将参数名称 设置为 Authorization。
-
完成配置。
步骤四:部署 Agent
Agent 可以部署在本地或者阿里云函数计算的 Agent Run 中,根据需求选择其一即可。
本地部署
-
安装开发环境
-
安装 JDK 17 或以上版本
-
安装 Maven
-
-
打包项目
在终端执行以下命令:
cd idaas-java-agent-id-demo mvn clean package -
设置环境变量
以 Linux 操作系统为例:
export IDAAS_CLIENT_SECRET={client_secret} export ENV_PRIVATE_KEY={private_key} export JWKS_ENDPOINT=https://xxx.aliyunidaas.com/api/v2/iauths_system/oauth2/jwks export AGENT_AUDIENCE=https://agentserver.example.com export AGENT_SCOPE=agent.access export ACCESS_IDENTITY=Machine export LLM_API_KEY_IDENTIFIER=llm_api_key export EXTERNAL_SERVER_API_KEY_IDENTIFIER=mcp_server_api_key export ENTERPRISE_SERVICE_SCOPE="https://mcpserver.com|mcp.access" export EXTERNAL_SERVER_URL=https://dashscope.aliyuncs.com/api/v1/mcps/amap-maps/mcp export ENTERPRISE_SERVICE_URL=https://xxx.{region_id}.fcapp.run环境变量名
说明
获取方式
IDAAS_CLIENT_SECRETAgent 的 Client Secret 凭证(使用 Client Secret 认证时必填)
Agent 身份安全配置指导中创建的 Agent 节点的通用配置中查看。
ENV_PRIVATE_KEYAgent 的私钥(使用公私钥认证时必填)
Agent 身份安全配置指导中,为 Agent 节点创建公私钥凭证时所上传公钥对应的私钥。
JWKS_ENDPOINTIDaaS 验签公钥端点
格式为:https://xxx.aliyunidaas.com/api/v2/iauths_system/oauth2/jwks。
其中 xxx 取自步骤二:配置 IDaaS SDK的SDK 配置文件中 issuer 字段的对应值。
AGENT_AUDIENCEAgent 的受众标识
Agent 身份安全配置指导中创建的 Agent 节点的通用配置中查看。
AGENT_SCOPEAgent 的权限标识
Agent 身份安全配置指导中创建的 Agent 节点的权限配置中查看。
ACCESS_IDENTITYAgent 身份模式:
Machine(机器身份)或Human(用户身份)本实例中使用 Machine(机器身份),适用于 Agent 以自身身份独立操作的场景,下游服务感知到的是 Agent 的机器身份
LLM_API_KEY_IDENTIFIER大模型 API Key 标识
Agent 身份安全配置指导中创建的大模型节点中查看。
EXTERNAL_SERVER_API_KEY_IDENTIFIER第三方服务 API Key 标识
Agent 身份安全配置指导中创建的三方服务节点中查看。
ENTERPRISE_SERVICE_SCOPE企业服务访问范围(受众标识 | 权限标识)
格式为:"受众标识 | 权限标识"。注意必须包含双引号。
Agent 身份安全配置指导中创建的企业服务节点中的通用配置下查看受众标识,权限配置下查看权限标识。
EXTERNAL_SERVER_URL三方服务的 Endpoint
高德 MCP Server HTTP Endpoint,从百炼平台的高德地图 MCP 中查看。
ENTERPRISE_SERVICE_URL企业服务 Endpoint
函数计算中部署的企业服务的访问地址,3.2 配置 JWT 认证中在函数详情页签中单击函数拓扑图中的触发器,查看公网访问地址。
-
运行 JAR
在终端执行以下命令:
java -Dcloud_idaas_config_path=cloud_idaas_config_for_computer.json -jar target/idaas-java-agent-id-demo-1.0.jar
AgentRun 部署
-
打包并压缩 Agent 示例代码
在终端执行以下命令:
cd idaas-java-agent-id-demo mvn clean package cd ../ zip -r idaas-java-agent-id-demo.zip idaas-java-agent-id-demo/ -
创建执行角色
-
单击导航栏中的。
-
单击创建角色,信任主体类型选择 云服务,信任主体名称选择函数计算/FC 。
-
角色名称设置为
sample-fc-role。
-
创建 Agent
-
登录函数计算 FC 控制台。
-
在左侧导航栏中选择 函数智能 > 智能体 AgentRun。
-
在角色授权检查中单击 一键授权(首次创建时需要)。
-
单击创建 Agent,选择通过代码创建。
-
代码来源选择 上传代码包,运行时选择 Java 17。
-
上传压缩好的
idaas-java-agent-id-demo.zip文件。 -
启动命令填入:
java -Dcloud_idaas_config_path=classpath:cloud_idaas_config_for_agent_run.json -jar idaas-java-agent-id-demo/target/idaas-java-agent-id-demo-1.0.jar -
启动端口填入
9002。 -
配置环境变量。
环境变量名
说明
获取方式
IDAAS_CLIENT_SECRETAgent 的 Client Secret 凭证(使用 Client Secret 认证时必填)
Agent 身份安全配置指导中创建的 Agent 节点的通用配置中查看。
ENV_PRIVATE_KEY
Agent 的私钥(使用公私钥认证时必填)
Agent 身份安全配置指导中,为 Agent 节点创建公私钥凭证时所上传公钥对应的私钥。
JWKS_ENDPOINTIDaaS 验签公钥端点
格式为:https://xxx.aliyunidaas.com/api/v2/iauths_system/oauth2/jwks。
其中 xxx 取自步骤二:配置 IDaaS SDK的SDK 配置文件中 issuer 字段的对应值。
AGENT_AUDIENCEAgent 的受众标识
Agent 身份安全配置指导中创建的 Agent 节点的通用配置中查看。
AGENT_SCOPEAgent 的权限标识
Agent 身份安全配置指导中创建的 Agent 节点的权限配置中查看。
ACCESS_IDENTITY
Agent 身份模式:
Machine(机器身份)或Human(用户身份)本实例中使用 Machine(机器身份),适用于 Agent 以自身身份独立操作的场景,下游服务感知到的是 Agent 的机器身份
LLM_API_KEY_IDENTIFIER大模型 API Key 标识
Agent 身份安全配置指导中创建的大模型节点中查看。
EXTERNAL_SERVER_API_KEY_IDENTIFIER第三方服务 API Key 标识
Agent 身份安全配置指导中创建的三方服务节点中查看。
ENTERPRISE_SERVICE_SCOPE企业服务访问范围(受众标识 | 权限标识)
格式为:受众标识 | 权限标识。
Agent 身份安全配置指导中创建的企业服务节点中的通用配置下查看受众标识,权限配置下查看权限标识。
EXTERNAL_SERVER_URL三方服务的 Endpoint
高德 MCP Server HTTP Endpoint,从百炼平台的高德地图 MCP 中查看。
ENTERPRISE_SERVICE_URL企业服务 Endpoint
3.2 配置 JWT 认证中在函数详情页签中单击函数拓扑图中的触发器,可查看公网访问地址。
-
执行角色选择之前创建的
sample-fc-role。 -
单击 开始部署。
-
部署完成后,在 Agent 卡片右下角单击详情,在左侧导航栏中选择版本与灰度,单击创建 Endpoint。
-
步骤五:部署客户端
5.1 前端 UI 配置
修改 Agent 示例代码中的 frontend/config.js 文件:
window.APP_CONFIG = {
API_URL: 'http://localhost:9002/openai/v1/chat/completions',
IDAAS_AUTHORIZE_ENDPOINT: 'https://xxx.aliyunidaas.com/login/app/common/oauth2/authorize',
IDAAS_LOGOUT_ENDPOINT: 'https://xxx.aliyunidaas.com/login/app/common/oauth2/logout',
CLIENT_ID: '{client_id}',
SCOPE: 'https://agentserver.example.com|agent.access',
};
|
字段名 |
说明 |
获取方式 |
|
|
Agent 服务请求路径。 |
本地部署: AgentRun 部署: |
|
|
IDaaS 授权端点。 |
格式为: https://xxx.aliyunidaas.com/login/app/common/oauth2/authorize 其中 xxx 取自步骤二:配置 IDaaS SDK的SDK 配置文件中 issuer 字段的对应值。 |
|
|
IDaaS 的登出端点。 |
格式为: https://xxx.aliyunidaas.com/login/app/common/oauth2/logout 其中 xxx 取自步骤二:配置 IDaaS SDK的SDK 配置文件中 issuer 字段的对应值。 |
|
|
IDaaS 中创建的客户端的 Client ID。 |
Agent 身份安全配置指导中创建的客户端节点中查看。 |
|
|
访问范围,格式为: |
Agent 身份安全配置指导中创建的 Agent 节点的通用配置中查看 |
5.2 启动前端 UI
在终端执行以下命令(需安装 Nodejs):
cd frontend
npx http-server -p 9001
5.3 配置客户端应用
-
进入 IDaaS EIAM 控制台。
-
在左侧导航栏中单击应用管理> M2M应用管理。
-
定位Agent 身份安全配置指导中创建的客户端节点,单击操作列下的管理。
-
单击登录访问页签,在授权模式下勾选隐式模式。
-
隐式模式参数的返回类型 Response Types选择 Token。
-
登录 Redirect URI填入前端 UI 启动地址:
http://127.0.0.1:9001/。 -
单击显示高级配置,登出回调地址填入前端 UI 启动地址:
http://127.0.0.1:9001/。 -
完成配置。
步骤六:验证配置
-
本地打开浏览器,访问
http://127.0.0.1:9001。 -
单击 使用 IDaaS 账户登录,使用 IDaaS 账户登录。
-
登录成功后,在对话框中输入测试请求,例如:
-
"杭州现在的天气怎么样":Agent 将调用高德地图 MCP Tool 查询天气。
-
"调用我的企业服务":Agent 将调用企业服务 Tool。
-
错误处理
|
错误现象 |
可能原因 |
解决方案 |
|
Access Token 校验失败 |
Token 过期或无效 |
重新登录获取新的 Access Token |
|
无法获取大模型 API Key |
API Key 标识配置错误 |
检查 |
|
企业服务调用失败 |
Access Token 权限不足 |
检查 |
|
JWT 认证失败 |
JWKS 配置错误 |
确认函数计算触发器的 JWKS 配置是否正确 |
|
SDK 配置加载失败 |
配置文件路径错误 |
检查 |
附录
AgentRun 部署使用 OpenAPI 方式认证
在 AgentRun 场景下,IDaaS 支持 OpenAPI 认证方式:无需配置 Client Secret 或私钥,直接使用执行角色的 STS Token 访问 IDaaS OpenAPI,获取 Agent 的 Access Token。
修改 IDaaS SDK 配置
修改 src/main/resources/cloud_idaas_config_for_agent_run.json,在原有配置基础上新增 openApiEndpoint,并修改 authnConfiguration,其余字段保持不变:
{
"idaasInstanceId": "idaas_xxx",
"clientId": "app_xxx",
"issuer":"https://xxx/api/v2/iauths_system/oauth2",
"tokenEndpoint": "https://xxx/api/v2/iauths_system/oauth2/token",
"scope": "api.example.com|read:file",
"openApiEndpoint":"eiam.[region_id].aliyuncs.com",
"developerApiEndpoint":"eiam-developerapi.[region_id].aliyuncs.com",
"authnConfiguration": {
"identityType": "CLIENT",
"authnMethod": "PLUGIN",
"pluginName": "alibabacloudPluginCredentialProvider"
}
}
详细的配置说明,可参见环境准备。
执行角色配置
AgentRun 执行角色需具备调用 IDaaS GenerateOauthToken OpenAPI 的权限,示例权限策略如下:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "eiam:GenerateOauthToken",
"Resource": [
"acs:eiam:{regionId}:{accountId}:instance/{InstanceId}/application/{ApplicationId}"
]
}
]
}
将 {regionId}、{accountId}、{InstanceId}、{ApplicationId} 替换为实际的地域 ID、阿里云主账号 ID、IDaaS 实例 ID 和 Agent ID。
创建权限策略与授权执行角色,详细配置可参见阿里云 OpenAPI 认证。
AgentRun 部署服务时,需按上述说明修改 SDK 配置并将配置执行角色,其余流程均保持一致。