插件身份验证
插件提供了多种身份验证 Plugin authentication
插件提供了多种身份验证方案以适应各种用例。要指定插件的身份验证方案,请使用清单文件。我们的插件域策略概述了我们解决域安全问题的策略。有关可用身份验证选项的示例,请参阅示例部分,展示了所有不同的选择。
ai-plugin.json
文件需要设置一个 auth
模式。即使您选择不使用身份验证,也仍需要指定 "auth": { "type": "none" }
。
我们仅支持本地主机开发而不需要身份验证;如果您想使用服务、用户或OAuth身份验证,您需要设置远程服务器。
无需认证 No authentication
我们支持无需认证的流程,用于不需要身份验证的应用程序,其中用户能够直接向您的API发送请求而没有任何限制。如果您有一个开放的API想要向所有人提供,这非常有用,因为它允许来自OpenAI插件请求以外的来源的流量。
"auth": {
"type": "none"
},
服务访问令牌 Service level
如果您想明确启用OpenAI插件与您的API配合工作,可以在插件安装流程中提供客户端密钥。这意味着来自OpenAI插件的所有流量都将得到身份验证,但不会在用户级别上进行身份验证。与API角度相比,这种流程对于简单的最终用户体验更加有利但控制较少。
- 首先,在ChatGPT插件商店中选择“开发自己的插件”,然后输入您的插件托管的域名。
- 在
ai-plugin.json
中,将auth.type
设置为"service_http"
,如我们的服务级别认证示例所示。 - 您将被提示输入服务访问令牌,这是指在您的代码中指定的一个字符串。
- 我们安全地存储了您的服务访问令牌的加密副本,以便安装插件而无需进行额外的身份验证。
- 服务访问令牌将在插件请求中作为
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"
}
用户级身份验证 User level
由于当前的 UI 限制,我们不允许带有用户身份验证的插件进入插件商店。我们预计这种情况将在不久的将来发生改变。
就像用户可能已经在使用您的API一样,我们允许通过启用最终用户在插件安装期间复制和粘贴其秘密API键来进行用户级身份验证。虽然我们在存储它时会加密秘密密钥,但考虑到用户体验不佳,我们不建议采用此方法。
- 首先,用户在安装插件时粘贴其访问令牌
- 我们存储令牌的加密版本
- 然后,在向插件发送请求时通过Authorization头传递它(“Authorization”:“[Bearer / Basic] [user的令牌]”)
"auth": {
"type": "user_http",
"authorization_type": "bearer",
},
OAuth流程 OAuth
插件协议与OAuth兼容。我们期望的OAuth流程的简单示例应该看起来像以下内容:
- 首先,在 ChatGPT 插件商店中选择“开发自己的插件”,并输入托管插件的域名(不能为localhost)。
- 在
ai-plugin.json
中,将auth.type
设置为"oauth"
,如我们的OAuth示例所示。 - 然后,您将被提示输入OAuth客户端ID和客户端秘密。
- 客户端ID和客户端秘密可以是简单的文本字符串,但应遵循OAuth的最佳实践。
- 我们将存储客户端秘密的加密版本,而客户端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, }
- 在用户登录过程中,ChatGPT 将使用指定的
authorization_content_type
向您的authorization_url
发出请求,我们期望获得一个访问令牌和一个可选的 刷新令牌 (opens in a new tab),我们将使用它来定期获取新的访问令牌。 - 每当用户向插件发出请求时,用户的令牌都将出现在授权标头中:(“Authorization”: “[Bearer/Basic][user’s token]”)
以下是 ai-plugin.json
文件中 OAuth 配置的示例:
"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"
。 plugin_id
是通过请求传递给您的 OAuth 端点的(请注意,它今天在 ChatGPT UI 中不是明显可见的,但将来可能会是)。您可在那里检查请求以查看plugin_id
。- 在插件重定向回给定的
redirect_uri
后,ChatGPT 将通过使用内容类型authorization_content_type
和参数{“grant_type”:“authorization_code”,“client_id”:[client_id],“client_secret”:[client_secret],“code”:[重定向返回的代码],“redirect_uri”:[与之前相同的重定向 URI]}
向authorization_url
发出 POST 请求,从而完成 OAuth 流程。