插件提供多种身份验证模式以适应各种用例。要为您的插件指定身份验证模式,请使用清单文件。OpenAI的插件域政策概述了OpenAI解决域安全问题的策略。有关可用身份验证选项的示例,请参阅示例部分,其中展示了所有不同的选择。
该ai-plugin.json
文件需要auth
设置架构。即使您选择不使用身份验证,仍然需要指定"auth": { "type": "none" }
.
OpenAI只支持localhost开发,无需认证;如果要使用服务、用户或 OAuth 身份验证,则需要设置远程服务器。
OpenAI支持不需要身份验证的应用程序的无身份验证流程,用户可以不受任何限制地直接向您的 API 发送请求。如果您有一个开放的 API 并希望所有人都可以使用,这将特别有用,因为它允许来自 OpenAI 插件请求以外的其他来源的流量。
1
2
3
"auth": {
"type": "none"
},
如果你想专门启用 OpenAI 插件来使用你的 API,你可以在插件安装流程中提供客户端密码。这意味着来自 OpenAI 插件的所有流量都将经过身份验证,但不会在用户级别进行身份验证。此流程受益于简单的最终用户体验,但从 API 的角度来看控制较少。
- 首先,在 ChatGPT 插件商店中选择“开发您自己的插件”,然后输入托管您的插件的域。
- 在 中
ai-plugin.json
,设置auth.type
为如OpenAI的服务级别身份验证示例"service_http"
所示。 - 系统将提示您输入服务访问令牌,这是在您的代码中指定的字符串。
- OpenAI安全地存储您的服务访问令牌的加密副本,以便无需额外身份验证即可安装插件。
Authorization
服务访问令牌在插件请求的标头中发送。
- 将服务访问令牌添加到 ChatGPT UI 后,您将看到一个验证令牌。
- 将验证令牌添加到
ai-plugin.json
auth 部分下的文件中,如下所示。
"auth": {
"type": "service_http",
"authorization_type": "bearer",
"verification_tokens": {
"openai": "Replace_this_string_with_the_verification_token_generated_in_the_ChatGPT_UI"
}
},
验证令牌旨在支持多个应用程序。您可以简单地添加您希望插件支持的其他应用程序:
"verification_tokens": {
"openai": "Replace_this_string_with_the_verification_token_generated_in_the_ChatGPT_UI",
"other_service": "abc123"
}
由于当前的 UI 限制,OpenAI不允许带有用户身份验证的插件进入插件商店。OpenAI预计这种情况会在不久的将来有所改变。
就像用户可能已经在使用您的 API 一样,OpenAI允许最终用户在插件安装期间将他们的秘密 API 密钥复制并粘贴到 ChatGPT UI 中,从而实现用户级身份验证。虽然OpenAI在将密钥存储在数据库中时对其进行了加密,但鉴于用户体验不佳,OpenAI不推荐这种方法。
- 首先,用户在安装插件时粘贴他们的访问令牌
- OpenAI存储令牌的加密版本
- 然后OpenAI在向插件发出请求时将其传递到 Authorization 标头中(“Authorization”:“ [Bearer/Basic][user's token] ”)
"auth": {
"type": "user_http",
"authorization_type": "bearer",
},
插件协议与 OAuth 兼容。OpenAI期望的 OAuth 流程的一个简单示例应该如下所示:
- 首先,在 ChatGPT 插件商店中选择“开发您自己的插件”,然后输入托管您的插件的域(不能是本地主机)。
- 在 中
ai-plugin.json
,设置auth.type
为如OpenAI的OAuth 示例"oauth"
所示。 - 然后,系统会提示您输入 OAuth 客户端 ID 和客户端密码。
- 客户端 ID 和密码可以是简单的文本字符串,但应遵循 OAuth 最佳实践。
- OpenAI存储客户端密钥的加密版本,而客户端 ID 可供最终用户使用。
- 将客户端 ID 和客户端密码添加到 ChatGPT UI 后,您将看到一个验证令牌。
- 将验证令牌添加到
ai-plugin.json
auth 部分下的文件中,如下所示。 - OAuth 请求将包含以下信息:
request={'grant_type': 'authorization_code', 'client_id': 'id_set_by_developer', 'client_secret': 'secret_set_by_developer', 'code': 'abc123', 'redirect_uri': 'https://chat.openai.com/aip/plugin-some_plugin_id/oauth/callback'}
- 为了让某人通过 OAuth 使用插件,他们需要安装插件,然后在 ChatGPT UI 中显示“登录方式”按钮。
- 端点
authorization_url
应返回如下所示的响应:{ "access_token": "example_token", "token_type": "bearer", "refresh_token": "example_token", "expires_in": 59, }
authorization_url
在用户登录过程中,ChatGPT使用指定的向您发出请求authorization_content_type
,OpenAI希望取回访问令牌和可选的刷新令牌,OpenAI使用它来定期获取新的访问令牌。- 每次用户向插件发出请求时,用户的令牌将在授权标头中传递:(“授权”:“ [Bearer/Basic][用户令牌] ”)。
下面是文件中 OAuth 配置的示例ai-plugin.json
:
"auth": {
"type": "oauth",
"client_url": "https://example.com/authorize",
"scope": "",
"authorization_url": "https://example.com/auth/",
"authorization_content_type": "application/json",
"verification_tokens": {
"openai": "Replace_this_string_with_the_verification_token_generated_in_the_ChatGPT_UI"
}
},
为了更好地理解 OAuth 的 URL 结构,这里是字段的简短描述:
- 当您使用 ChatGPT 设置插件时,系统会要求您提供 OAuth
client_id
和client_secret
. - 当用户登录插件时,ChatGPT 会将用户的浏览器定向到
"[client_url]?response_type=code&client_id=[client_id]&scope=[scope]&redirect_uri=https%3A%2F%``2Fchat.openai.com``%2Faip%2F[plugin_id]%2Foauth%2Fcallback"
- 通过向您的 OAuth 端点发出的请求传递
plugin_id
(请注意,它目前在 ChatGPT UI 中不可见,但将来可能会显示)。您可以在那里检查请求以查看plugin_id
. - 在您的插件重定向回给定后,ChatGPT 将通过向内容类型和参数
redirect_uri
发出 POST 请求来完成 OAuth 流程。authorization_urlauthorization_content_type{ “grant_type”: “authorization_code”, “client_id”: [client_id], “client_secret”: [client_secret], “code”: [the code that was returned with the redirect], “redirect_uri”: [the same redirect uri as before] }