使用跨应用访问(XAA)构建安全的Agent-to-App连接
概述
企业IT监管下的独立应用间安全访问是OAuth 2.0中的一个公认缺口。企业无法有效监管跨应用通信,因为OAuth 2.0同意屏幕依赖于用户授予对其个人帐户的访问权限。现在,随着跨系统通信的AI代理的出现,解决这一缺口的需求变得更加迫切——特别是在保护敏感数据流的企业AI安全日益重要的背景下。
什么是跨应用访问(XAA)?
跨应用访问(XAA)是一种新协议,让集成商能够启用安全的代理到应用和应用到应用访问。企业IT管理员不再需要分散的集成和重复登录,而是获得集中控制:他们可以决定什么可以连接、执行安全策略,并准确查看正在访问的内容。这解锁了跨应用的无缝、可扩展集成——无论是像Google Calendar和Zoom这样的两个应用,还是企业中的数百个应用。
设置AI代理到应用连接的前提条件
要使用跨应用访问(XAA)设置安全的代理到应用连接,您需要以下内容:
- Okta开发者帐户(集成商免费计划):您需要一个具有集成商免费计划的Okta开发者帐户。该帐户将作为您的身份提供商(IdP)来设置跨应用访问。
- AWS凭证:您需要AWS访问密钥ID和AWS秘密访问密钥
- 开发者工具:这些工具对于克隆、编辑、构建和运行演示应用程序至关重要
- Git – 用于克隆和管理存储库
- VS Code – 用于阅读和修改示例源代码
- Dev Containers扩展(VS Code)– 推荐使用,因为它会在打开项目时自动配置依赖项和环境
- Docker – Dev Container需要它来在隔离环境中构建和运行示例应用程序
使用Okta通过OAuth 2.0和OpenID Connect (OIDC)保护AI应用程序
在深入代码之前,我们需要在Okta注册我们的应用程序。在此演示中:
- Agent0:请求应用程序的AI代理(代表用户进行API调用)
- Todo0:资源应用程序(拥有受保护的API)
- 托管连接:两个应用程序之间的信任关系,在Okta中创建
我们将在您的Okta集成商免费计划帐户中创建这两个应用程序,获取它们的客户端凭证,然后连接它们。
在Okta组织中启用跨应用访问
⚠️ 注意:跨应用访问目前是一个自助服务的早期访问(EA)功能。必须通过管理控制台启用,然后应用程序才会出现在目录中。
- 登录到您的Okta集成商免费计划帐户
- 在Okta管理控制台中,选择Settings > Features
- 导航到Early access
- 找到Cross App Access并选择Turn on(启用切换)
- 刷新管理控制台
创建资源应用程序(Todo0)
- 在Okta管理控制台中,导航到Applications > Applications
- 选择Browse App Catalog
- 搜索Todo0 - Cross App Access (XAA) Sample Resource App,并选择它
- 选择Add Integration
- 在Application label字段中输入"Todo0"并点击Done
- 点击Sign On选项卡查看Client ID和Client secret。这些需要包含在您的.env.todo中
创建请求应用程序(Agent0)
- 返回Applications > Applications
- 选择Browse App Catalog
- 搜索Agent0 - Cross App Access (XAA) Sample Requesting App,并选择它
- 选择Add Integration
- 在Application label字段中输入Agent0并点击Done
- 点击Sign On选项卡查看Client ID和Client secret。这些需要包含在您的.env.agent中
建立Todo0和AI代理(Agent0)之间的连接
- 从Applications页面,选择Agent0应用程序
- 转到Manage Connections选项卡
- 在App granted consent下,选择Add requesting apps,选择Todo0,然后Save
- 在Apps providing consent下,选择Add resource apps,选择Todo0,然后Save
现在Agent0和Todo0已连接。如果您检查任一应用程序的Manage Connection选项卡,您将看到连接已建立。
在Okta组织中设置测试用户
现在应用程序已就位,我们需要一个测试用户来登录并触发跨应用访问流程。
创建测试用户
- 在Okta管理控制台中,转到Directory > People
- 选择Add Person
- 填写详细信息:
- First name: Bob
- Last name: Tables
- Username / Email: bob@tables.fake
- 在Activations下,选择Activate now,标记☑️ I will set password,并创建临时密码
- 可选:您可以标记☑️ User must change password on first login
- 选择Save(如果没有立即看到新用户,请刷新页面)
将Okta应用程序分配给测试用户
- 打开Bob Tables用户配置文件
- 选择Assign Applications
- 将Agent0(请求应用程序)和Todo0(资源应用程序)都分配给Bob
这确保Bob可以登录到Agent0,并且Agent0可以安全地代表他请求访问Todo0。
配置Node.js跨应用访问项目
准备好Okta环境(应用程序和用户)后,让我们设置本地项目。
克隆存储库:
|
|
更改到项目目录:
|
|
打开VS Code命令面板并运行"Dev Containers: Open Folder in Container"
要打开命令面板,选择View > Command Palette…,MacOS键盘快捷键Cmd+Shift+P,或Windows键盘快捷键Ctrl+Shift+P
跨应用访问MCP项目概览
|
|
配置OAuth 2.0和AI基础模型环境文件
此时,您拥有:
- Agent0和Todo0的客户端ID和客户端密钥(来自Okta管理控制台)
- 您的Okta组织URL,在管理控制台的管理控制台配置文件菜单中可见。通常看起来像
https://integrator-123456.okta.com
生成OIDC配置和访问令牌文件
从项目根目录运行:
|
|
这会搭建以下文件:
- packages/authorization-server/.env.todo
- packages/authorization-server/.env.agent
- packages/agent0/.env
配置AI和资源应用程序连接值
打开每个文件并使用您的组织特定值更新占位符:
authorization-server/.env.todo
|
|
authorization-server/.env.agent
|
|
agent0/.env
|
|
为两个应用程序注册OAuth 2.0重定向URI
最后,我们需要告诉Okta将认证响应发送到每个应用程序的位置。
对于Agent0:
- 从您的Okta管理控制台,导航到Applications > Applications
- 打开Agent0应用程序
- 导航到Sign On选项卡
- 在Settings部分,选择Edit
- 在Redirect URIs字段中,添加
http://localhost:5000/openid/callback/customer1 - 选择Save
对于Todo0重复相同的步骤:
- 打开Todo0应用程序
- 转到Sign On选项卡 > Settings > Edit
- 在Redirect URIs字段中,添加:
http://localhost:5001/openid/callback/customer1 - 选择Save
现在两个应用程序都知道认证后重定向的位置。
初始化数据库并运行项目
准备好应用程序和环境配置后,下一步是准备本地项目,设置其数据库,并使两个应用程序上线。
引导项目
从存储库的根目录,安装所有工作区并初始化数据库:
|
|
由于这是您第一次运行,您将被询问是否重置数据库。对于Todo0和Agent0都输入"y"。
运行并在浏览器中访问应用程序
引导完成后,使用以下命令启动两个应用程序(及其授权服务器):
|
|
在Chrome浏览器的标签页中打开以下端口:
- Todo0(资源应用程序):http://localhost:3001
- Agent0(请求应用程序):http://localhost:3000
此时,两个应用程序应该都已启动并通过Okta连接。🎉
测试XAA流程:从Bob到Agent0到Todo0
配置好所有内容后,是时候看看跨应用访问的实际运行情况了。
与XAA资源应用程序Todo0交互,创建任务
- 在Work Email字段中,输入:bob@tables.fake,然后选择Continue
- 您将被重定向到Okta登录页面。使用测试用户凭证登录:
- Username: bob@tables.fake
- Password: 您之前创建的临时密码
- 第一次登录时,您将被提示:
- 设置新密码
- 注册Okta Verify以进行MFA
- 登录后,向您的待办事项列表添加几个任务
- 选择其中一个任务并将其标记为完成,以验证应用程序准确更新状态
让AI代理(请求应用程序)访问您的待办事项
- 在浏览器中打开Agent0应用程序
- 选择Initialize以设置AWS Bedrock客户端。连接后,您将看到以下消息:
✅ Successfully connected to AWS Bedrock! You can now start chatting. - 选择Connect to IdP按钮
- 在幕后,Agent0从Okta请求身份断言,并将其交换为Todo0的访问令牌
- 如果一切配置正确,您将看到以下消息:
Authentication completed successfully! Welcome back.
- 要确认Agent0实际上正在从Okta接收令牌:
- 打开新的浏览器标签页并导航到:http://localhost:3000/api/tokens
- 您应该看到一个包含以下内容的JSON有效负载:accessToken、jagToken和idToken。这验证了Agent0已成功通过Okta认证,并获得了调用Todo0所需的令牌
现在使用自然提示与Agent0交互。例如:编写此提示What's on my plate in my to-do list?
⚠️ 注意:Agent0将使用访问令牌调用Todo0 API并返回您的待处理任务
让我们尝试更多提示:
- 要求Agent0添加新任务
- 要求它将现有任务标记为完成
- 刷新Todo0应用程序——您将看到更改立即反映出来
幕后:OAuth 2.0身份断言授权授予
✅ Bob Tables使用Okta登录一次 ⏩ Agent0(请求应用程序)从Okta获取身份断言 🔄 Okta为Bob担保并将该断言交换为访问令牌 👋 Agent0使用该令牌安全地调用Todo0(资源应用程序)API
🎉 恭喜!您已成功配置并运行了跨应用访问项目。
需要帮助设置安全的跨域企业AI应用程序访问吗?
如果在设置或测试此项目时遇到任何问题,请随时在论坛上发布您的查询:👉 Okta开发者论坛
如果您有兴趣在您自己的应用程序中实现跨应用访问(XAA)——无论是作为请求应用程序还是资源应用程序——并想探索Okta如何支持您的用例,请通过以下方式与我们联系:📩 xaa@okta.com
了解更多关于跨应用访问、OAuth 2.0和保护您的应用程序
如果本演练帮助您了解跨应用访问在实践中如何工作,您可能喜欢深入了解塑造它的标准和对话。以下是一些继续您旅程的资源:
- 📘 跨应用访问文档 – 在生产中配置和管理跨应用访问的官方指南和管理文档
- 🎙️ 关于MCP和跨应用访问的开发者播客 – 听取背景故事、用例以及这对开发人员为何重要
- 📄 OAuth身份断言授权授予(IETF草案)– 推动此流程的新兴标准
如果您是OAuth的新手或想了解安全委托访问背后的基础知识,请查看这些资源:
- 什么是OAuth?
- OAuth、OpenID Connect和SAML之间有什么区别?
- 使用OAuth 2.0、OIDC和PKCE保护您的Express应用程序
- 为什么您应该从静态API令牌迁移到OAuth 2.0
- 如何开始使用按需SaaS应用程序工作坊
在LinkedIn、Twitter上关注我们,并订阅我们的YouTube频道以获取更多开发者内容。如果您有任何问题,请在下方留言!