跳到主要内容

插件鉴权(Authentication)

插件提供多种身份验证模式以适应各种用例。要为您的插件指定身份验证模式,请使用清单(manifest)文件。我们的 插件域名政策 概述了我们解决域安全问题的策略。有关可用身份验证选项的示例,请参阅 示例部分,其中展示了所有不同的选择。

无身份验证

我们支持不需要身份验证的应用程序的无身份验证流程,用户可以不受任何限制地直接向您的 API 发送请求。如果您有一个开放的 API 并希望所有人都可以使用,这将特别有用,因为它允许来自 OpenAI 插件请求以外的其他来源的流量。

"auth": {
"type": "none"
},

服务级

如果你想专门启用 OpenAI 插件来使用你的 API,你可以在插件安装流程中提供客户端密码。这意味着来自 OpenAI 插件的所有流量都将经过身份验证,但不会在用户级别进行身份验证。此流程受益于简单的最终用户体验,但从 API 的角度来看控制较少。

  • 首先,开发人员获取访问访问令牌(access token)(全局 Key)
  • 然后,开发人员将访问令牌(access token)添加到清单(manifest)文件中
  • 我们将存储加密后的访问令牌(access token)
  • 用户在安装插件时不需要做任何事情
  • 最后,插件发出接口请求时会在 Header 里带上 Authorization ("Authorization": "[Bearer/Basic][user’s token]")
"auth": {
"type": "service_http",
"authorization_type": "bearer",
"verification_tokens": {
"openai": "cb7cdfb8a57e45bc8ad7dea5bc2f8324"
}
},

用户级

就像用户可能已经在使用您的 API 一样,我们允许最终用户在插件安装期间将他们的 API Key 复制并粘贴到 ChatGPT UI 中,从而实现用户级的身份验证。虽然我们在将密钥存储在数据库中时对其进行了加密,但鉴于用户体验不佳,我们不推荐这种方法。

  • 首先,用户在安装插件时粘贴其访问令牌(access token)
  • 我们将存储加密后的访问令牌(access token)
  • 最后,插件发出接口请求时会在 Header 里带上 Authorization ("Authorization": "[Bearer/Basic][user’s token]")
"auth": {
"type": "user_http",
"authorization_type": "bearer",
},

OAuth

插件协议与 OAuth 兼容。我们在清单(manifest)中期望的 OAuth 流的简单示例如下所示:

  • 首先,开发人员粘贴其 OAuth client id 和 client secret
    • 然后,他们必须将验证令牌(verification token)添加到其清单(manifest)文件中
  • 我们将存储加密后的客户端密钥(client secret)
  • 用户在安装插件时通过插件的网站登录
    • 这为我们为用户提供了一个 OAuth 访问令牌(access token)(以及可选的 refresh token),我们将其加密后存储
  • 最后,插件发出接口请求时会在 Header 里带上 Authorization ("Authorization": "[Bearer/Basic][user’s token]")
"auth": {
"type": "oauth",
"client_url": "https://my_server.com/authorize",
"scope": "",
"authorization_url": "https://my_server.com/token",
"authorization_content_type": "application/json",
"verification_tokens": {
"openai": "abc123456"
}
},

为了更好地理解 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"
  • 在您的插件重定向回给定的 redirect_uri 后,ChatGPT 将通过向 authorization_url 发送内容类型为 authorization_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] } 的 POST 请求来完成 OAuth 流程