转载

OpenAi的聊天插件认证

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

该文件需要设置架构。即使选择不使用身份验证,仍需要指定 。ai-plugin.jsonauth"auth": { "type": "none" }

我们仅支持不进行身份验证的本地主机开发;如果要使用服务、用户或 OAuth 身份验证,则需要设置远程服务器。

无身份验证

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

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

服务级别

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

  • 首先,在 ChatGPT 插件商店中选择“开发您自己的插件”,然后输入托管您的插件的域。
  • 在ai-plugin.json中,将auth.type设置为“service_http”,如我们的服务级别auth示例所示。

  • 系统将提示你输入服务访问令牌,该令牌是在代码中指定的字符串。
    • 我们安全地存储您的服务访问令牌的加密副本,以启用插件安装,而无需额外的身份验证。
    • 服务访问令牌在插件请求的Authorization标头中发送。
  • 将服务访问令牌添加到 ChatGPT UI 后,您将看到一个验证令牌。
  • 将验证令牌添加到身份验证部分下的文件中,如下所示。ai-plugin.json
"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" }

用户级别

就像用户可能已经在使用您的 API 一样,我们通过允许最终用户在插件安装期间将其秘密 API 密钥复制并粘贴到 ChatGPT UI 中来允许用户级身份验证。虽然我们在将密钥存储在数据库中时对其进行加密,但鉴于用户体验不佳,我们不建议使用此方法。

  • 首先,用户在安装插件时粘贴其访问令牌
  • 我们存储令牌的加密版本
  • 然后,我们在向插件发出请求时将其传递到授权标头中(“授权”:“[持有者/基本][用户的令牌]”)
"auth": {
"type": "user_http", "authorization_type": "bearer", },

OAuth

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

  • 首先,开发人员粘贴其 OAuth 客户端 ID 和客户端密钥
    • 然后,他们必须将验证令牌添加到其清单文件中
  • 我们存储客户端密钥的加密版本
  • 用户在安装插件时通过插件的网站登录
    • 这为我们为用户提供了一个OAuth访问令牌(以及可选的刷新令牌),我们将其加密存储
  • 最后,我们在向插件发出请求时,在授权标头中传递该用户的令牌(“授权”:“[持有者/基本][用户的令牌]”)
"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": "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"
  • 在您的插件重定向回给定redirect_uri后,ChatGPT 将通过向 提供内容类型和参数的 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] }