为确保插件只能在它们控制的资源上执行操作,OpenAI对插件的清单和API规范强制执行要求。
定义插件的根域
清单文件定义了显示给用户的信息(如徽标和联系信息)以及托管插件的OpenAPI规范的URL。获取清单时,插件的根域将按照以下规则建立:
- 如果域名有www.作为子域名,那么根域名将从托管清单的域名中去掉www。
- 否则,根域名与托管清单的域名相同。
关于重定向的注意事项:在解析清单时,只允许子域名重定向。唯一的例外是从一个带有www的子域名重定向到一个没有www的子域名。
根域名的示例:
- ✅ https://example.com/.well-known/ai-plugin.json
- 根域名:example.com
- ✅ https://www.example.com/.well-known/ai-plugin.json
- 根域名:example.com
- ✅ https://www.example.com/.well-known/ai-plugin.json → 重定向到 https://example.com/.well-known/ai-plugin.json
- 根域名:example.com
- ✅ https://foo.example.com/.well-known/ai-plugin.json → 重定向到 https://bar.foo.example.com/.well-known/ai-plugin.json
- 根域名:bar.foo.example.com
- ✅ https://foo.example.com/.well-known/ai-plugin.json → 重定向到 https://bar.foo.example.com/baz/ai-plugin.json
- 根域名:bar.foo.example.com
- ❌ https://foo.example.com/.well-known/ai-plugin.json → 重定向到 https://example.com/.well-known/ai-plugin.json
- 不允许重定向到父级域名
- ❌ https://foo.example.com/.well-known/ai-plugin.json → 重定向到 https://bar.example.com/.well-known/ai-plugin.json
- 不允许重定向到同级子域名
- ❌ https://example.com/.well-known/ai-plugin.json -> 重定向到 https://example2.com/.well-known/ai-plugin.json
- 不允许重定向到另一个域名
清单验证
清单本身中的特定字段必须满足以下要求:
- api.url - 提供给OpenAPI规范的URL必须托管在根域名的同一级或子域名上。
- legal_info - 提供的URL的二级域名必须与根域名的二级域名相同。
- contact_info - 电子邮件地址的二级域名应与根域名的二级域名相同。
解析API规范
清单中的api.url字段提供了一个链接到OpenAPI规范,该规范定义了插件可以调用的API。OpenAPI允许指定多个服务器基本URL。使用以下逻辑选择服务器URL:
- 遍历服务器URL列表
- 使用第一个与根域名完全匹配或是根域名的子域名的服务器URL
- 如果上述情况都不适用,则默认为托管API规范的域名。例如,如果规范托管在api.example.com上,则api.example.com将用作OpenAPI规范中的路由的基本URL。
注意:请避免为托管API规范和任何API端点使用重定向,因为不能保证始终会遵循重定向。
使用TLS和HTTPS
与插件的所有流量(例如,获取ai-plugin.json文件、OpenAPI规范、API调用)必须在端口443上使用TLS 1.2或更高版本,并带有有效的公共证书。
IP出口范围
ChatGPT将从CIDR块23.102.140.112/28的IP地址调用您的插件。您可能希望明确允许这些IP地址。
另外,OpenAI的网络浏览插件从另一个IP地址块访问网站:23.98.142.176/28。
评论