{
  "title": "OpenID Connect for Agents (OIDC-A) 1.0 提案",
  "excerpt": "扩展 OpenID Connect Core 1.0 的技术提案,旨在为 OAuth 2.0 生态系统中基于 LLM 的代理提供表示、认证和授权框架。",
  "content_html": "<p><em>本文档提出了一个标准扩展,用于表示和验证基于 LLM 的代理的身份。它将核心提案与验证、证明和委托链的详细框架进行了整合。</em></p>\n\n<h2>摘要</h2>\n\n<p>OpenID Connect for Agents (OIDC-A) 1.0 是 OpenID Connect Core 1.0 的扩展,为 OAuth 2.0 生态系统中基于 LLM 的代理提供了表示、认证和授权框架。本规范定义了用于建立代理身份、验证代理证明、表示委托链以及基于代理属性实现细粒度授权的标准声明、端点和协议。</p>\n\n<h2>1. 引言</h2>\n\n<h3>1.1 基本原理</h3>\n\n<p>随着基于 LLM 的代理在数字生态系统中日益普及,对表示其身份和管理其授权的标准化方法的需求也在不断增长。传统的 OAuth 2.0 和 OpenID Connect 协议主要是为人类用户和常规应用程序设计的,缺乏表示自主代理独特特征所需的必要构造,例如:</p>\n\n<ul>\n<li>以不同程度的自主性代表用户行事</li>\n<li>在委托链中运行</li>\n<li>基于其底层模型拥有动态能力</li>\n<li>需要对其完整性和来源进行证明</li>\n</ul>\n\n<p>本规范通过扩展 OpenID Connect 来解决这些差距,为代理身份和授权提供了一个全面的框架。</p>\n\n<h3>1.2 术语</h3>\n\n<p>本规范使用 OAuth 2.0 [RFC6749]、OpenID Connect Core 1.0 中定义的术语,以及以下附加术语:</p>\n\n<ul>\n<li><strong>Agent(代理)</strong>:基于 LLM 的软件实体,能够根据自然语言指令进行自主或半自主操作。</li>\n<li><strong>Agent Provider(代理提供商)</strong>:负责创建、训练和/或托管代理的组织。</li>\n<li><strong>Agent Model(代理模型)</strong>:驱动代理的特定 LLM 模型(例如 GPT-4、Claude 3)。</li>\n<li><strong>Agent Instance(代理实例)</strong>:代理的特定运行实例,通常与特定任务或对话相关联。</li>\n<li><strong>Delegator(委托人)</strong>:将权限委托给代理代表其行事的实体(通常是人类用户)。</li>\n<li><strong>Delegation Chain(委托链)</strong>:从原始用户到可能多个代理的一系列委托步骤。</li>\n<li><strong>Attestation(证明)</strong>:代理完整性、来源和/或属性的加密证明。</li>\n<li><strong>Attestation Evidence(证明证据)</strong>:包含用于证明的证据的数据结构。</li>\n<li><strong>Relying Party (RP)(依赖方)</strong>:在此上下文中,通常是需要验证代理身份和授权的资源服务器或客户端应用程序。</li>\n</ul>\n\n<h3>1.3 概述</h3>\n\n<p>OIDC-A 通过以下方式扩展 OpenID Connect:</p>\n\n<ol>\n<li>定义表示代理身份、委托和能力的新标准声明。</li>\n<li>指定代理证明证据的机制和格式。</li>\n<li>建立表示和验证委托链的协议。</li>\n<li>提供代理能力和证明支持的发现机制。</li>\n<li>定义适合代理特定用例的授权框架。</li>\n<li>引入用于证明验证和能力发现的端点。</li>\n</ol>\n\n<h2>2. 代理身份声明</h2>\n\n<h3>2.1 核心代理身份声明</h3>\n\n<p>以下声明必须或应该包含在发给代理或关于代理的 ID Token 中:</p>\n\n<table class=\"custom-table\">\n    <thead>\n        <tr>\n            <th>声明</th>\n            <th>类型</th>\n            <th>描述</th>\n            <th>要求</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td><code>agent_type</code></td>\n            <td>string</td>\n            <td>标识代理的类型/类别(例如 \"assistant\"、\"retrieval\"、\"coding\")</td>\n            <td>必需</td>\n        </tr>\n        <tr>\n            <td><code>agent_model</code></td>\n            <td>string</td>\n            <td>标识特定模型(例如 \"gpt-4\"、\"claude-3-opus\"、\"gemini-pro\")</td>\n            <td>必需</td>\n        </tr>\n        <tr>\n            <td><code>agent_version</code></td>\n            <td>string</td>\n            <td>代理模型的版本标识符</td>\n            <td>推荐</td>\n        </tr>\n        <tr>\n            <td><code>agent_provider</code></td>\n            <td>string</td>\n            <td>提供/托管代理的组织(例如 \"openai.com\"、\"anthropic.com\")</td>\n            <td>必需</td>\n        </tr>\n        <tr>\n            <td><code>agent_instance_id</code></td>\n            <td>string</td>\n            <td>此特定代理实例的唯一标识符</td>\n            <td>必需</td>\n        </tr>\n    </tbody>\n</table>\n\n<h3>2.2 委托和权限声明</h3>\n\n<table class=\"custom-table\">\n    <thead>\n        <tr>\n            <th>声明</th>\n            <th>类型</th>\n            <th>描述</th>\n            <th>要求</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td><code>delegator_sub</code></td>\n            <td>string</td>\n            <td>最近将权限委托给此代理的实体的主体标识符</td>\n            <td>必需</td>\n        </tr>\n        <tr>\n            <td><code>delegation_chain</code></td>\n            <td>array</td>\n            <td>委托步骤的有序数组(见第 2.4.2 节)</td>\n            <td>可选</td>\n        </tr>\n        <tr>\n            <td><code>delegation_purpose</code></td>\n            <td>string</td>\n            <td>委托权限的目的/意图描述</td>\n            <td>推荐</td>\n        </tr>\n        <tr>\n            <td><code>delegation_constraints</code></td>\n            <td>object</td>\n            <td>委托人对代理施加的约束</td>\n            <td>可选</td>\n        </tr>\n    </tbody>\n</table>\n\n<h3>2.3 能力、信任和证明声明</h3>\n\n<table class=\"custom-table\">\n    <thead>\n        <tr>\n            <th>声明</th>\n            <th>类型</th>\n            <th>描述</th>\n            <th>要求</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td><code>agent_capabilities</code></td>\n            <td>array</td>\n            <td>表示代理能做什么的能力标识符数组</td>\n            <td>推荐</td>\n        </tr>\n        <tr>\n            <td><code>agent_trust_level</code></td>\n            <td>string</td>\n            <td>代理的信任分类(例如 \"verified\"、\"experimental\")</td>\n            <td>可选</td>\n        </tr>\n        <tr>\n            <td><code>agent_attestation</code></td>\n            <td>object</td>\n            <td>证明证据或引用(见第 2.4.4 节)</td>\n            <td>推荐</td>\n        </tr>\n        <tr>\n            <td><code>agent_context_id</code></td>\n            <td>string</td>\n            <td>对话/任务上下文的标识符</td>\n            <td>推荐</td>\n        </tr>\n    </tbody>\n</table>\n\n<h3>2.4 声明格式和验证</h3>\n\n<h4>2.4.1 <code>agent_type</code></h4>\n<p>来自已定义代理类型集合的字符串值。实现者在适用时应使用以下值之一:</p>\n<ul>\n<li><code>assistant</code>:通用助手代理</li>\n<li><code>retrieval</code>:专门从事信息检索的代理</li>\n<li><code>coding</code>:专门从事代码生成或分析的代理</li>\n<li><code>domain_specific</code>:针对特定领域专门化的代理</li>\n<li><code>autonomous</code>:具有高度自主性的代理</li>\n<li><code>supervised</code>:关键操作需要人工监督的代理</li>\n</ul>\n\n<p>可以使用自定义类型,但应遵循 <code>vendor:type</code> 格式(例如 <code>acme:financial_advisor</code>)。</p>\n\n<h4>2.4.2 <code>delegation_chain</code></h4>\n<p>JSON 数组,包含表示委托链中每个步骤的对象,从原始用户到当前代理。每个对象必须包含:</p>\n<ul>\n<li><code>iss</code>:必需。标识发布/验证此委托步骤的授权服务器或实体的字符串。</li>\n<li><code>sub</code>:必需。标识委托人(授予权限的实体)的字符串。</li>\n<li><code>aud</code>:必需。标识受托人(接收权限的代理)的字符串。</li>\n<li><code>delegated_at</code>:必需。表示委托发生时间的数字日期。</li>\n<li><code>scope</code>:必需。表示此委托步骤中授予的权限的空格分隔 OAuth 范围字符串。必须是委托人(<code>sub</code>)持有范围的子集。</li>\n<li><code>purpose</code>:可选。描述此委托步骤预期目的的字符串。</li>\n<li><code>constraints</code>:可选。指定委托约束的 JSON 对象(例如 <code>{\"max_duration\": 3600, \"allowed_resources\": [\"/data/abc\"]}</code>)。</li>\n<li><code>jti</code>:可选。此特定委托步骤的唯一标识符,对撤销或跟踪很有用。</li>\n</ul>\n\n<p>数组必须按时间顺序排列。</p>\n\n<p><em><code>delegation_chain</code> 的验证规则(由依赖方执行):</em></p>\n<ol>\n<li><strong>顺序验证:</strong>基于 <code>delegated_at</code> 确认时间顺序。</li>\n<li><strong>发行者信任:</strong>验证每个 <code>iss</code> 是否受信任。</li>\n<li><strong>受众匹配:</strong>确认步骤 N 的 <code>aud</code> 与步骤 N+1 的 <code>sub</code> 匹配。</li>\n<li><strong>范围减少:</strong>验证每个步骤中的 <code>scope</code> 是委托人可用范围的子集/等于。</li>\n<li><strong>约束执行:</strong>确保符合任何 <code>constraints</code>。</li>\n<li><strong>签名验证(如适用):</strong>如果步骤单独签名,则验证签名。</li>\n<li><strong>策略检查:</strong>根据授权策略评估已验证的链(例如最大长度)。</li>\n</ol>\n\n<h4>2.4.3 <code>agent_capabilities</code></h4>\n<p>表示代理能力的字符串标识符数组。实现者在可用时应使用来自明确定义分类法的能力标识符。自定义能力应遵循 <code>vendor:capability</code> 格式(例如 <code>acme:financial_analysis</code>)。</p>\n\n<h4>2.4.4 <code>agent_attestation</code></h4>\n<p>包含证明证据或其引用的 JSON 对象。必须包含指示证据类型的 <code>format</code> 字段。</p>\n\n<p><em>推荐格式:</em>基于 JWT,可能与 IETF RATS Entity Attestation Token (EAT) 兼容。</p>\n\n<p>示例:</p>\n<pre><code class=\"language-json\">\"agent_attestation\": {\n  \"format\": \"urn:ietf:params:oauth:token-type:eat\",\n  \"token\": \"eyJhbGciOiJFUzI1NiIsInR5cCI6ImVhdCtqd3QifQ...\"\n}\n</code></pre>\n<p>可以使用其他格式(例如 <code>\"format\": \"TPM2-Quote\"</code>、<code>\"format\": \"SGX-Quote\"</code>)。</p>\n\n<h2>3. 协议流程</h2>\n\n<h3>3.1 代理认证流程</h3>\n\n<p>OIDC-A 认证流程扩展了标准 OpenID Connect 认证流程:</p>\n\n<ol>\n<li><strong>客户端注册</strong>:代表代理的客户端必须注册额外的元数据(见第 4 节)。</li>\n<li><strong>认证请求</strong>:代理应包含 <code>agent</code> 范围和可能的 <code>delegation_context</code>。</li>\n<li><strong>认证响应</strong>:授权服务器在 ID Token 中包含代理特定声明。</li>\n<li><strong>令牌验证</strong>:依赖方必须根据策略验证标准 OIDC 声明和相关的代理特定声明(包括证明和委托,如果存在)。</li>\n</ol>\n\n<h3>3.2 委托流程</h3>\n\n<p>当代理被委托权限时:</p>\n\n<ol>\n<li>委托人进行认证并授权委托。</li>\n<li>授权服务器向代理发布新的 ID Token,包括 <code>delegator_sub</code>、<code>delegation_chain</code>(已更新)、<code>delegation_purpose</code> 和受约束的 <code>scope</code>。</li>\n</ol>\n\n<h3>3.3 证明验证流程</h3>\n\n<p>要验证代理的证明:</p>\n\n<ol>\n<li>代理在其 ID Token 中包含 <code>agent_attestation</code> 声明或单独提供证据。</li>\n<li>依赖方根据指定的 <code>format</code> 验证证据:\n<ul>\n<li>使用受信任的密钥(通过发现获得)验证加密签名。</li>\n<li>将平台测量结果与已知良好值进行比较。</li>\n<li>验证随机数以防止重放攻击。</li>\n<li>可选地,使用 <code>agent_attestation_endpoint</code> 获取验证帮助。</li>\n</ul>\n</li>\n<li>授权决策纳入证明状态(例如 <code>verified: true/false</code>)。</li>\n</ol>\n\n<h2>4. 客户端注册和发现</h2>\n\n<h3>4.1 代理客户端注册元数据</h3>\n\n<p>扩展 OAuth 2.0 动态客户端注册 [RFC7591]:</p>\n\n<table class=\"custom-table\">\n    <thead>\n        <tr>\n            <th>参数</th>\n            <th>类型</th>\n            <th>描述</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td><code>agent_provider</code></td>\n            <td>string</td>\n            <td>代理提供商的标识符</td>\n        </tr>\n        <tr>\n            <td><code>agent_models_supported</code></td>\n            <td>array</td>\n            <td>支持的代理模型列表</td>\n        </tr>\n        <tr>\n            <td><code>agent_capabilities</code></td>\n            <td>array</td>\n            <td>代理能力列表</td>\n        </tr>\n        <tr>\n            <td><code>attestation_formats_supported</code></td>\n            <td>array</td>\n            <td>支持的证明格式列表</td>\n        </tr>\n        <tr>\n            <td><code>delegation_methods_supported</code></td>\n            <td>array</td>\n            <td>支持的委托方法列表</td>\n        </tr>\n    </tbody>\n</table>\n\n<h3>4.2 发现元数据</h3>\n\n<p>扩展 OpenID Connect Discovery 1.0:</p>\n\n<table class=\"custom-table\">\n    <thead>\n        <tr>\n            <th>参数</th>\n            <th>类型</th>\n            <th>描述</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td><code>agent_attestation_endpoint</code></td>\n            <td>string</td>\n            <td>证明端点的 URL</td>\n        </tr>\n        <tr>\n            <td><code>agent_capabilities_endpoint</code></td>\n            <td>string</td>\n            <td>能力发现端点的 URL</td>\n        </tr>\n        <tr>\n            <td><code>agent_claims_supported</code></td>\n            <td>array</td>\n            <td>支持的代理声明列表</td>\n        </tr>\n        <tr>\n            <td><code>agent_types_supported</code></td>\n            <td>array</td>\n            <td>支持的代理类型列表</td>\n        </tr>\n        <tr>\n            <td><code>delegation_methods_supported</code></td>\n            <td>array</td>\n            <td>支持的委托方法列表</td>\n        </tr>\n        <tr>\n            <td><code>attestation_formats_supported</code></td>\n            <td>array</td>\n            <td>支持的证明格式列表</td>\n        </tr>\n        <tr>\n            <td><code>attestation_verification_keys_endpoint</code></td>\n            <td>string</td>\n            <td>用于检索验证证明签名的公钥的 URL</td>\n        </tr>\n    </tbody>\n</table>\n\n<h2>5. 端点</h2>\n\n<h3>5.1 代理证明端点</h3>\n\n<p>一个 OAuth 2.0 保护的资源,返回关于代理的证明信息或协助验证提供的证据。URL 通过 <code>agent_attestation_endpoint</code> 发现参数公布。</p>\n\n<h4>5.1.1 请求示例(获取信息)</h4>\n\n<pre><code>GET /agent/attestation?agent_id=123&amp;nonce=abc\nAuthorization: Bearer &lt;token&gt;\n</code></pre>\n\n<h4>5.1.2 响应示例</h4>\n\n<pre><code class=\"language-json\">{\n  \"verified\": true,\n  \"provider\": \"openai.com\",\n  \"model\": \"gpt-4\",\n  \"version\": \"2025-03\",\n  \"attestation_timestamp\": 1714348800,\n  \"attestation_signature\": \"...\"\n}\n</code></pre>\n\n<h3>5.2 代理能力端点</h3>\n\n<p>提供关于代理能力的信息。URL 通过 <code>agent_capabilities_endpoint</code> 发现参数公布。</p>\n\n<h4>5.2.1 请求示例</h4>\n\n<pre><code>GET /.well-known/agent-capabilities\n</code></pre>\n\n<h4>5.2.2 响应示例</h4>\n\n<pre><code class=\"language-json\">{\n  \"capabilities\": [\n    {\"id\": \"text_generation\", \"description\": \"...\"},\n    {\"id\": \"code_generation\", \"description\": \"...\"}\n  ],\n  \"supported_constraints\": [\"max_tokens\", \"allowed_tools\"]\n}\n</code></pre>\n\n<h2>6. 安全考虑</h2>\n\n<h3>6.1 代理认证</h3>\n\n<p>代理应使用强非对称方法(JWT Client Auth [RFC7523]、mTLS [RFC8705]),可能与证明结合。不推荐使用共享密钥。</p>\n\n<h3>6.2 委托安全</h3>\n\n<p>系统必须验证整个委托链,强制执行范围减少,实施同意机制,并考虑时间限制。策略可能会限制链长度。需要强大的撤销机制。</p>\n\n<h3>6.3 证明安全</h3>\n\n<p>需要安全管理签名密钥,强大的随机数处理,值得信赖的已知良好测量值,安全的端点,以及防止重放攻击的保护。证明证据可能涉及隐私问题。</p>\n\n<h3>6.4 令牌安全</h3>\n\n<p>带有代理声明的 ID Token 应该被加密。Access Token 应具有有限的生命周期。代理的刷新令牌需要仔细考虑。</p>\n\n<h2>7. 隐私考虑</h2>\n\n<p>实现必须考虑代理身份的潜在关联、委托链的隐私影响、用户同意要求以及声明中的数据最小化。</p>\n\n<h2>8. 兼容性和版本控制</h2>\n\n<p>OIDC-A 1.0 设计为与 OAuth 2.0 [RFC6749]、OIDC Core 1.0、JWT [RFC7519] 和相关 RFC 兼容。未来版本将致力于向后兼容。</p>\n\n<h2>9. 参考文献</h2>\n\n<ul>\n<li>[RFC6749] The OAuth 2.0 Authorization Framework</li>\n<li>[RFC7519] JSON Web Token (JWT)</li>\n<li>[RFC7523] JWT Profile for OAuth 2.0 Client Authentication</li>\n<li>[RFC7591] OAuth 2.0 Dynamic Client Registration</li>\n<li>[RFC7662] OAuth 2.0 Token Introspection</li>\n<li>[RFC8705] OAuth 2.0 Mutual-TLS Client Authentication</li>\n<li>[OpenID Connect Core 1.0]</li>\n<li>[OpenID Connect Discovery 1.0]</li>\n<li>[IETF RATS] Remote Attestation Procedures Architecture</li>\n</ul>\n\n<h2>附录 A: 带有代理声明的 ID Token 示例</h2>\n\n<pre><code class=\"language-json\">{\n  \"iss\": \"https://auth.example.com\",\n  \"sub\": \"agent_instance_789\",\n  \"aud\": \"client_123\",\n  \"exp\": 1714435200,\n  \"iat\": 1714348800,\n  \"auth_time\": 1714348800,\n  \"nonce\": \"n-0S6_WzA2Mj\",\n  \"agent_type\": \"assistant\",\n  \"agent_model\": \"gpt-4\",\n  \"agent_version\": \"2025-03\",\n  \"agent_provider\": \"openai.com\",\n  \"agent_instance_id\": \"agent_instance_789\",\n  \"delegator_sub\": \"user_456\",\n  \"delegation_purpose\": \"Email management assistant\",\n  \"agent_capabilities\": [\"email:read\", \"email:draft\", \"calendar:view\"],\n  \"agent_trust_level\": \"verified\",\n  \"agent_context_id\": \"conversation_123\",\n  \"agent_attestation\": {\n    \"format\": \"urn:ietf:params:oauth:token-type:eat\",\n    \"token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\",\n    \"timestamp\": 1714348800\n  },\n  \"delegation_chain\": [\n    {\n      \"iss\": \"https://auth.example.com\",\n      \"sub\": \"user_456\",\n      \"aud\": \"agent_instance_789\",\n      \"delegated_at\": 1714348700,\n      \"scope\": \"email profile calendar\"\n    }\n  ]\n}\n</code></pre>\n\n<h2>附录 B: 委托链示例(多步骤)</h2>\n\n<pre><code class=\"language-json\">\"delegation_chain\": [\n  {\n    \"iss\": \"https://auth.example.com\",\n    \"sub\": \"user_456\",\n    \"aud\": \"agent_instance_789\",\n    \"delegated_at\": 1714348800,\n    \"scope\": \"email calendar\",\n    \"purpose\": \"Manage my emails and calendar\"\n  },\n  {\n    \"iss\": \"https://auth.example.com\",\n    \"sub\": \"agent_instance_789\",\n    \"aud\": \"agent_instance_101\",\n    \"delegated_at\": 1714348830,\n    \"scope\": \"calendar:view\",\n    \"purpose\": \"Analyze available time slots\"\n  }\n]\n</code></pre>\n\n<style>\n.custom-table {\n    width: 100%;\n    border-collapse: collapse;\n    margin-bottom: 1em; /* Add some space below tables */\n}\n\n.custom-table th, .custom-table td {\n    border: 1px solid #ddd;\n    padding: 8px;\n    text-align: left; /* Default alignment */\n}\n\n.custom-table th {\n    background-color: #f2f2f2;\n    font-weight: bold; /* Make headers bold */\n    text-align: center; /* Center align headers */\n}\n\n.custom-table tr:nth-child(even){background-color: #f9f9f9;}\n\n.custom-table tr:hover {background-color: #ddd;}\n\n.custom-table td {\n    color: #333; /* Darker text for better readability */\n    vertical-align: top; /* Align content top */\n}\n\n/* Center align specific columns */\n.custom-table td:nth-child(2) { /* Type column */\n    text-align: center;\n}\n.custom-table td:nth-child(4) { /* Requirement column */\n    text-align: center;\n}\n\n/* Style inline code within tables */\n.custom-table code {\n    background-color: #eef; /* Light background for code */\n    padding: 0.2em 0.4em;\n    border-radius: 3px;\n    font-size: 90%;\n}\n</style>",
  "source_hash": "sha256:73ea6cb5f87d953b8052cd05e0a127fa1a9cf036913230dc7e62c81ec066af98",
  "model": "claude-sonnet-4-5-20250929",
  "generated_at": "2026-01-02T01:18:49.208012+00:00"
}