使用跨应用访问(XAA)构建安全的Agent-to-App连接

本文详细介绍如何使用Okta的跨应用访问(XAA)协议建立安全的AI代理到应用连接,包含完整的技术实现步骤、OAuth 2.0配置、环境设置和实际测试流程,帮助企业实现跨应用的安全通信。

使用跨应用访问(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)功能。必须通过管理控制台启用,然后应用程序才会出现在目录中。

  1. 登录到您的Okta集成商免费计划帐户
  2. 在Okta管理控制台中,选择Settings > Features
  3. 导航到Early access
  4. 找到Cross App Access并选择Turn on(启用切换)
  5. 刷新管理控制台

创建资源应用程序(Todo0)

  1. 在Okta管理控制台中,导航到Applications > Applications
  2. 选择Browse App Catalog
  3. 搜索Todo0 - Cross App Access (XAA) Sample Resource App,并选择它
  4. 选择Add Integration
  5. 在Application label字段中输入"Todo0"并点击Done
  6. 点击Sign On选项卡查看Client ID和Client secret。这些需要包含在您的.env.todo中

创建请求应用程序(Agent0)

  1. 返回Applications > Applications
  2. 选择Browse App Catalog
  3. 搜索Agent0 - Cross App Access (XAA) Sample Requesting App,并选择它
  4. 选择Add Integration
  5. 在Application label字段中输入Agent0并点击Done
  6. 点击Sign On选项卡查看Client ID和Client secret。这些需要包含在您的.env.agent中

建立Todo0和AI代理(Agent0)之间的连接

  1. 从Applications页面,选择Agent0应用程序
  2. 转到Manage Connections选项卡
  3. 在App granted consent下,选择Add requesting apps,选择Todo0,然后Save
  4. 在Apps providing consent下,选择Add resource apps,选择Todo0,然后Save

现在Agent0和Todo0已连接。如果您检查任一应用程序的Manage Connection选项卡,您将看到连接已建立。

在Okta组织中设置测试用户

现在应用程序已就位,我们需要一个测试用户来登录并触发跨应用访问流程。

创建测试用户

  1. 在Okta管理控制台中,转到Directory > People
  2. 选择Add Person
  3. 填写详细信息:
  4. 在Activations下,选择Activate now,标记☑️ I will set password,并创建临时密码
  5. 可选:您可以标记☑️ User must change password on first login
  6. 选择Save(如果没有立即看到新用户,请刷新页面)

将Okta应用程序分配给测试用户

  1. 打开Bob Tables用户配置文件
  2. 选择Assign Applications
  3. 将Agent0(请求应用程序)和Todo0(资源应用程序)都分配给Bob

这确保Bob可以登录到Agent0,并且Agent0可以安全地代表他请求访问Todo0。

配置Node.js跨应用访问项目

准备好Okta环境(应用程序和用户)后,让我们设置本地项目。

克隆存储库:

1
git clone https://github.com/oktadev/okta-cross-app-access-mcp

更改到项目目录:

1
cd okta-cross-app-access-mcp

打开VS Code命令面板并运行"Dev Containers: Open Folder in Container"

要打开命令面板,选择View > Command Palette…,MacOS键盘快捷键Cmd+Shift+P,或Windows键盘快捷键Ctrl+Shift+P

跨应用访问MCP项目概览

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
okta-cross-app-access-mcp/
├─ packages/
│  ├─ agent0/               # 请求应用程序(UI + 服务)– 运行在:3000
│  │  └─ .env               # Agent0环境(AWS凭证)
│  ├─ todo0/                # 资源应用程序(API/UI)– 运行在:3001
│  ├─ authorization-server/ # 用于ID-JAG + 令牌交换的本地认证服务器
│  │  └─ .env.agent         # IdP凭证(Agent0端)
│  │  └─ .env.todo          # IdP凭证(Todo0端)
│  ├─ id-assert-authz-grant-client/ # 实现身份断言授权授予客户端逻辑
├─ .devcontainer/           # VS Code Dev Containers设置


├─ scripts/                 # 辅助脚本
├─ package.json             
└─ tsconfig.json

配置OAuth 2.0和AI基础模型环境文件

此时,您拥有:

  • Agent0和Todo0的客户端ID和客户端密钥(来自Okta管理控制台)
  • 您的Okta组织URL,在管理控制台的管理控制台配置文件菜单中可见。通常看起来像https://integrator-123456.okta.com

生成OIDC配置和访问令牌文件

从项目根目录运行:

1
yarn setup:env

这会搭建以下文件:

  • packages/authorization-server/.env.todo
  • packages/authorization-server/.env.agent
  • packages/agent0/.env

配置AI和资源应用程序连接值

打开每个文件并使用您的组织特定值更新占位符:

authorization-server/.env.todo

1
2
3
4
CUSTOMER1_EMAIL_DOMAIN=tables.fake

CUSTOMER1_CLIENT_ID=<Todo0客户端ID>
CUSTOMER1_CLIENT_SECRET=<Todo0客户端密钥>

authorization-server/.env.agent

1
2
3
4
CUSTOMER1_EMAIL_DOMAIN=tables.fake

CUSTOMER1_CLIENT_ID=<Agent0客户端ID>
CUSTOMER1_CLIENT_SECRET=<Agent0客户端密钥>

agent0/.env

1
2
AWS_ACCESS_KEY_ID=<您的AWS访问密钥ID>
AWS_SECRET_ACCESS_KEY=<您的AWS秘密访问密钥>

为两个应用程序注册OAuth 2.0重定向URI

最后,我们需要告诉Okta将认证响应发送到每个应用程序的位置。

对于Agent0:

  1. 从您的Okta管理控制台,导航到Applications > Applications
  2. 打开Agent0应用程序
  3. 导航到Sign On选项卡
  4. 在Settings部分,选择Edit
  5. 在Redirect URIs字段中,添加http://localhost:5000/openid/callback/customer1
  6. 选择Save

对于Todo0重复相同的步骤:

  1. 打开Todo0应用程序
  2. 转到Sign On选项卡 > Settings > Edit
  3. 在Redirect URIs字段中,添加:http://localhost:5001/openid/callback/customer1
  4. 选择Save

现在两个应用程序都知道认证后重定向的位置。

初始化数据库并运行项目

准备好应用程序和环境配置后,下一步是准备本地项目,设置其数据库,并使两个应用程序上线。

引导项目

从存储库的根目录,安装所有工作区并初始化数据库:

1
yarn bootstrap

由于这是您第一次运行,您将被询问是否重置数据库。对于Todo0和Agent0都输入"y"。

运行并在浏览器中访问应用程序

引导完成后,使用以下命令启动两个应用程序(及其授权服务器):

1
yarn start

在Chrome浏览器的标签页中打开以下端口:

  • Todo0(资源应用程序):http://localhost:3001
  • Agent0(请求应用程序):http://localhost:3000

此时,两个应用程序应该都已启动并通过Okta连接。🎉

测试XAA流程:从Bob到Agent0到Todo0

配置好所有内容后,是时候看看跨应用访问的实际运行情况了。

与XAA资源应用程序Todo0交互,创建任务

  1. 在Work Email字段中,输入:bob@tables.fake,然后选择Continue
  2. 您将被重定向到Okta登录页面。使用测试用户凭证登录:
  3. 第一次登录时,您将被提示:
    • 设置新密码
    • 注册Okta Verify以进行MFA
  4. 登录后,向您的待办事项列表添加几个任务
  5. 选择其中一个任务并将其标记为完成,以验证应用程序准确更新状态

让AI代理(请求应用程序)访问您的待办事项

  1. 在浏览器中打开Agent0应用程序
  2. 选择Initialize以设置AWS Bedrock客户端。连接后,您将看到以下消息:✅ Successfully connected to AWS Bedrock! You can now start chatting.
  3. 选择Connect to IdP按钮
    • 在幕后,Agent0从Okta请求身份断言,并将其交换为Todo0的访问令牌
    • 如果一切配置正确,您将看到以下消息:Authentication completed successfully! Welcome back.
  4. 要确认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频道以获取更多开发者内容。如果您有任何问题,请在下方留言!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计