内容纲要
插件提供了许多身份验证模式来适应各种用例。要为您的插件指定身份验证模式,请使用清单文件。我们的插件域策略概述了我们解决域安全问题的策略。有关可用身份验证选项的示例,请参阅示例部分,其中展示了所有不同的选择。
一、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_id
和client_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]}