最新n1n v2.0.1 正式上线!企业级大模型接口聚合平台 (LLM API Gateway),为您接入 500+ AI Models,价格低至 1 折, 立即尝试

使用 Bedrock AgentCore 网关实现 ServiceNow 令牌交换

作者
  • avatar
    姓名
    Nino
    职业
    Senior Tech Editor

构建企业级的AI代理不仅仅是将诸如Claude 3.5 Sonnet之类的大模型连接到LLM API,更需要严格遵守安全协议,例如在调用ServiceNow等下游系统时保留最终用户的身份。传统上,开发人员必须编写自定义的拦截器Lambda函数来管理OAuth 2.0代表用户(OBO)令牌交换。然而,借助Amazon Bedrock AgentCore Gateway,此功能现在已在原生层面进行集成,从而为使用像 n1n.ai 这样可靠的LLM API聚合器的开发人员简化了整个架构。

在这篇深度剖析中,我们将探讨在LLM代理与使用Microsoft Entra ID(前身为Azure AD)的ServiceNow REST API之间,协调无缝用户身份保留工作流所需的架构模式、逐步配置工作流和代码实现。

理解AI网关中的代表用户(OBO)流

当用户与AI代理交互时(无论是通过自定义聊天界面还是企业工作区),请求都携带用户的身份验证令牌,通常是由Microsoft Entra ID等身份提供商(IdP)颁发的JSON Web Token(JWT)。当代理决定调用外部工具(例如在ServiceNow中创建事件)时,该API调用必须以特定用户的权限执行,而不是以通用的服务账户执行。

从历史来看,实现这一点意味着:

  1. 在应用层捕获传入的用户令牌。
  2. 通过自定义执行上下文传递该令牌。
  3. 部署AWS Lambda函数来拦截请求,使用urn:ietf:params:oauth:grant-type:jwt-bearer授权类型调用Microsoft身份平台的/token端点,并将用户令牌交换为下游访问令牌。
  4. 将新令牌注入到ServiceNow的授权标头中。

这种架构引入了延迟、维护开销和安全漏洞。Bedrock AgentCore Gateway的引入通过在网关层级原生处理OAuth 2.0令牌交换,彻底改变了这一局面。

特性传统Lambda拦截器Bedrock AgentCore Gateway(原生OBO)
延迟开销高(每次工具调用 > 150ms)低(网关原生处理 < 20ms)
维护成本高(自定义代码、密钥轮换)低(托管服务配置)
安全风险客户端密钥暴露风险更大安全、集中化的凭据管理
集成复杂度需要自定义中间件原生工具定义映射

逐步配置指南

要配置AgentCore Gateway与Microsoft Entra ID和ServiceNow进行原生OBO令牌交换,请遵循此结构化的实现路径。如果您正在使用诸如 n1n.ai 等平台提供的工具在本地测试代理循环,请确保您的环境变量与生产配置相匹配。

第一步:在Microsoft Entra ID中注册应用

您需要在企业目录中建立信任关系:

  1. 代理应用程序(客户端): 注册一个代表您的AI代理的应用程序。为其授予代表用户请求令牌的API权限。
  2. ServiceNow目标API: 在您的ServiceNow集成上公开应用程序范围,或在Entra ID中注册ServiceNow企业应用程序,以接受由您的租户签发的令牌。

第二步:配置Bedrock AgentCore网关

导航至Amazon Bedrock控制台,选择AgentCore Gateways,并创建一个新的网关实例。您将配置上游身份验证和下游凭据提供商。

{
  &quot;gatewayName&quot;: &quot;enterprise-servicenow-gateway&quot;,
  &quot;authentication&quot;: {
    &quot;type&quot;: &quot;OAuth2&quot;,
    &quot;identityProviderConfig&quot;: {
      &quot;issuer&quot;: &quot;https://login.microsoftonline.com/&lt;tenant-id&gt;/v2.0&quot;,
      &quot;clientId&quot;: &quot;&lt;agent-client-id&gt;&quot;
    }
  },
  &quot;tokenExchange&quot;: {
    &quot;grantType&quot;: &quot;urn:ietf:params:oauth:grant-type:jwt-bearer&quot;,
    &quot;scope&quot;: &quot;https://service-now.api.domain/.default&quot;,
    &quot;clientSecretArn&quot;: &quot;arn:aws:secretsmanager:us-east-1:123456789012:secret:entra-client-secret&quot;
  }
}

第三步:定义ServiceNow工具架构

接下来,为您的代理将访问的ServiceNow REST API端点定义OpenAPI架构。网关利用此架构将代理意图参数直接映射到HTTP请求。

{
  &quot;openapi&quot;: &quot;3.0.0&quot;,
  &quot;info&quot;: {
    &quot;title&quot;: &quot;ServiceNow Incident API&quot;,
    &quot;version&quot;: &quot;1.0.0&quot;
  },
  &quot;paths&quot;: {
    &quot;/api/now/table/incident&quot;: {
      &quot;post&quot;: {
        &quot;summary&quot;: &quot;Create Incident&quot;,
        &quot;operationId&quot;: &quot;createIncident&quot;,
        &quot;parameters&quot;: [
          {
            &quot;name&quot;: &quot;short_description&quot;,
            &quot;in&quot;: &quot;query&quot;,
            &quot;required&quot;: true,
            &quot;schema&quot;: {
              &quot;type&quot;: &quot;string&quot;
            }
          }
        ],
        &quot;responses&quot;: {
          &quot;201&quot;: {
            &quot;description&quot;: &quot;Incident created successfully&quot;
          }
        }
      }
    }
  }
}

与您的应用程序代码集成

从后端应用程序调用代理时,请直接在授权标头中传递传入的用户JWT。Bedrock运行时将捕获此令牌,并在访问ServiceNow之前自动执行OBO交换。

import boto3
import requests

# 初始化bedrock客户端
client = boto3.client(&quot;bedrock-agent-runtime&quot;, region_name=&quot;us-east-1&quot;)

def invoke_agent_with_user_token(user_jwt, prompt_text):
    response = client.invoke_agent(
        agentId=&quot;YOUR_AGENT_ID&quot;,
        agentAliasId=&quot;YOUR_ALIAS_ID&quot;,
        sessionId=&quot;session-12345&quot;,
        inputText=prompt_text,
        sessionState={
            &quot;invocationType&quot;: &quot;USER_CONTEXT&quot;,
            &quot;authToken&quot;: user_jwt
        }
    )
    return response

企业部署的专业提示

  1. 令牌缓存: 在您的IdP中适当地配置令牌缓存窗口,以最大程度地减少高并发代理交互期间的延迟峰值。
  2. 范围最小化: 确保AgentCore Gateway请求的Entra ID范围严格符合ServiceNow操作所需的最小权限原则。
  3. 统一聚合: 对于在Bedrock之外测试多模型设置的开发人员,将您的开发管道与 n1n.ai 进行集成,可以确保跨不同模型提供商的统一API路由、速率限制和成本监控。

获取免费API密钥请访问 n1n.ai