Actions 提供了不同的身份验证机制,以适应各种用例。要为你的 action 指定身份验证机制,请使用 GPT 编辑器并选择“None”、“API Key”或“OAuth”。
默认情况下,所有 actions 的身份验证方法均设为“None”,但你可以更改此设置,并允许不同的 actions 使用不同的身份验证方法。
无身份验证
对于用户无需 API 密钥或通过 OAuth 登录即可直接向你的 API 发送请求的应用,我们支持无身份验证的流程。
考虑在初始用户交互时使用无身份验证,因为如果强制用户登录应用,可能会导致用户流失。你可以创建一种“未登录”体验,然后通过启用单独的 action 将用户引导至“已登录”体验。
API 密钥身份验证
就像用户可能已经习惯使用你的 API 那样,我们允许通过 GPT 编辑器 UI 进行 API 密钥身份验证。在将密钥存储到我们的数据库时,我们会对密钥进行加密,以确保你的 API 密钥安全。
如果你的 API 执行的操作比无身份验证流程稍微重要一些,但又不需要单个用户登录,那么这种方法会非常有用。添加 API 密钥身份验证可以保护你的 API,为你提供更精细的访问控制,并让你了解请求的来源。
OAuth
Actions 允许每个用户通过 OAuth 登录。这是提供个性化体验并为用户提供最强大 actions 的最佳方式。带有 actions 的 OAuth 流程的一个简单示例如下所示:
- 首先,在 GPT 编辑器 UI 中选择“Authentication”,然后选择“OAuth”。
- 系统将提示你输入 OAuth 客户端 ID、客户端密钥、授权 URL、令牌 URL 和作用域。
- 客户端 ID 和密钥可以是简单的文本字符串,但应该 遵循 OAuth 最佳实践.
- 我们会存储客户端密钥的加密版本,而客户端 ID 对最终用户可见。
- OAuth 请求将包含以下信息:
request={'grant_type': 'authorization_code', 'client_id': 'YOUR_CLIENT_ID', 'client_secret': 'YOUR_CLIENT_SECRET', 'code': 'abc123', 'redirect_uri': 'https://chat.openai.com/aip/{g-YOUR-GPT-ID-HERE}/oauth/callback'}Note:https://chatgpt.com/aip/{g-YOUR-GPT-ID-HERE}/oauth/callback也是有效的。 - 为了让用户能够使用带有 OAuth 的 action,他们需要发送一条调用该 action 的消息,随后 ChatGPT UI 中将向用户显示一个“Sign in to [domain]”按钮。
- The
authorization_url端点应返回类似于以下内容的响应:{ "access_token": "example_token", "token_type": "bearer", "refresh_token": "example_token", "expires_in": 59 } - 在用户登录过程中,ChatGPT 会向你的
authorization_url使用指定的authorization_content_type,我们期望返回一个访问令牌,以及可选的 刷新令牌 我们用它来定期获取新的访问令牌。 - 每次用户向 action 发送请求时,用户的令牌都会在 Authorization 标头中传递:(“Authorization”: “[Bearer/Basic] [user’s token]”)。
- 我们要求 OAuth 应用使用 state 参数 for security reasons.
在自定义 GPT 上遇到登录失败问题(重定向 URL)?
- 请确保在你的 OAuth 应用中启用此重定向 URL:
- #1 重定向 URL:
https://chat.openai.com/aip/{g-YOUR-GPT-ID-HERE}/oauth/callback(某些客户端可能使用不同的域名) - #2 重定向 URL:
https://chatgpt.com/aip/{g-YOUR-GPT-ID-HERE}/oauth/callback(保存后在 ChatGPT UI 的 URL 栏中获取你的 GPT ID)如果你有多个 GPT,则需要根据风险承受能力为每个 GPT 单独启用,或者使用通配符。 - 调试提示:你的身份验证提供程序通常会记录失败日志(例如‘redirect_uri is not registered for client’),这也有助于调试登录问题。