入门文档(docs)
插件(Plugins)
验证(Authentication)

插件身份验证

插件提供了多种身份验证 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_idclient_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 流程。