Chat Plugins – Plugin authentication

内容纲要

https://platform.openai.com/docs/plugins/authentication

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

一、No authentication

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

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

二、Service level

如果你想让OpenAI插件与你的API一起工作,你可以在插件安装流程中提供一个客户端秘钥。这意味着来自OpenAI插件的所有流量都将进行身份验证,但不是在用户级别上。该流程受益于简单的最终用户体验,但从API的角度来看控制较少。

  • 首先,开发人员粘贴他们的access token (global key)
  • 然后,他们必须将验证token添加到清单文件中
  • 我们存储令牌的加密版本
  • 用户在安装插件时不需要做任何事情
  • 最后,我们在向插件发出请求时将其传递到授权头中("Authorization ": " [holder /Basic][user 's token]")
"auth": {
  "type": "service_http",
  "authorization_type": "bearer",
  "verification_tokens": {
    "openai": "cb7cdfb8a57e45bc8ad7dea5bc2f8324"
  }
},

三、User level

就像用户可能已经在使用你的API一样,我们允许最终用户在插件安装期间将他们的秘密API密钥复制和粘贴到ChatGPT UI中,从而实现用户级身份验证。虽然我们在将密钥存储在数据库中时对其进行加密,但考虑到糟糕的用户体验,我们不建议使用这种方法。

  • 首先,用户在安装插件时粘贴他们的access token
  • 我们存储token的加密版本
  • 然后我们在向插件发出请求时将其传递到授权头中("Authorization ": " [holder /Basic][user 's token]")

四、OAuth

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

  • 首先,开发人员粘贴他们的OAuth客户端id和客户端秘密
    • 然后,他们必须将验证令牌添加到清单文件中
  • 我们存储客户端秘密的加密版本
  • 用户在安装插件时通过插件的网站登录
    • 这为用户提供了一个OAuth访问令牌(可选的还有一个刷新令牌),我们将其加密存储
  • 最后,当向插件发出请求时,我们将用户的令牌传递到授权头中("Authorization ": " [holder /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将完成OAuth流通过POST请求authorization_url与内容类型authorization_content_type和参数{" grant_type ": " authorization_code ", " client_id ": [client_id], " client_secret ": [client_secret], " code ":[与重定向返回的代码]," redirect_uri ":[与之前相同的重定向uri]}

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

close
arrow_upward