Skip to content

Latest commit

 

History

History
107 lines (84 loc) · 7.02 KB

4.开发ChatGPT插件-认证.md

File metadata and controls

107 lines (84 loc) · 7.02 KB

插件提供多种身份验证模式以适应各种用例。要为您的插件指定身份验证模式,请使用清单文件。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.jsonauth 部分下的文件中,如下所示。
"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.jsonauth 部分下的文件中,如下所示。
  • 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 设置插件时,系统会要求您提供 OAuthclient_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"
  • 通过向您的 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] }