Frame.io Python SDK — 身份验证指南
Frame.io Python SDK — 身份验证指南
本指南介绍如何使用 Frame.io Python SDK (frameio) 通过 Frame.io API 进行身份验证。 Frame.io V4 API 使用 Adobe Identity Management Service (IMS),Adobe 的 OAuth 2.0 身份平台。 这是面向 Python 开发者的独立参考。 下方的所有代码示例和流程仅适用于 frameio 包。
Python SDK 中的身份验证类型
Python SDK 支持四种身份验证选项:
Adobe 的原生应用程序凭据需要自定义 URI 方案处理程序(例如 adobe+<hash>://…</hash>),这些处理程序会在操作系统层面拦截重定向。Python 没有注册此类处理程序的标准方法,因此 Python SDK 不提供 NativeAppAuth 类。对于需要用户交互的 Python 应用程序,请使用 WebAppAuth 并搭配本地回调服务器(例如 Flask 或 FastAPI)。对于非交互式工作负载,请使用 ServerToServerAuth。
服务帐户用户
使用服务器到服务器的身份验证时,您的应用程序充当服务帐户用户,这是一种可以代表服务执行操作的独特帐户类型。 这些内容在 Frame.io 中对其他用户可见:当服务帐户执行操作时,其名称会显示在 UI 中。 您可以通过 Adobe Admin Console 和 Developer Console 授予和撤销服务帐户访问权限。 服务帐户名称通过 Frame.io UI 进行管理。 默认情况下,您的第一个 S2S 连接名为 Service Account User,第二个名为 Service Account User 2,以此类推。
有关更多信息,请参阅 使用 Frame.io 服务器到服务器的支持完成自动化设置。
快速入门
前提条件
- Adobe Developer Console 提供的 凭据:
- 客户端 ID — 所有 OAuth 流均需要 - 客户端密钥 — 服务器到服务器的流和 Web 应用程序流需要 - 重定向 URI — Web 应用程序流和 SPA 流需要;必须注册在 Adobe 项目中
- 安装 SDK:
选择方法
- 无用户参与? 使用服务器到服务器 (
ServerToServerAuth)。 - 有用户参与且您可以存储密钥? 使用 Web 应用程序 (
WebAppAuth)。 - 有用户参与但您无法存储密钥? 使用 SPA (
SPAAuth)。
访问令牌
如果您已有访问令牌(来自其他 OAuth 系统或之前的交换,例如通过我们的 API Explorer获得),那么您可以直接传递:
这是最简单的方法,但令牌最终会过期,SDK 不会为您刷新令牌。
旧版开发者令牌
对于尚未通过 Adobe Admin Console 进行管理的 V4 迁移帐户,您可以继续使用来自 Frame.io 开发者网站的旧版开发者令牌。 您必须包含 x-frameio-legacy-token-auth 标头并将其设置为 true:
旧版开发者令牌不会过期,但它们是一种过渡机制。 对于新的集成和生产工作负载,我们推荐使用下面的其中一个 OAuth 2.0 流。 有关详细信息,请参阅迁移指南。
服务器到服务器(客户端凭据)
将此用于需要 Frame.io 访问权限且无需用户交互的后端服务和脚本。 此流仅适用于通过 Adobe Admin Console 管理的 Frame.io V4 帐户。 您的应用程序以服务帐户用户的身份进行身份验证,无需人工干预。
同步
异步
就是这样。 auth.get_token 是 SDK 在每个请求中都会调用的一个可调用对象。 如果当前令牌仍然有效,它就会立即返回。 如果即将过期,它会先获取一个新令牌,过程完全透明。
工作原理
您的客户端凭据(客户端 ID + 密钥)永不过期。 您只需出于安全维护目的手动轮换它们即可。 S2S 可为您提供实际上永久、不间断的 API 访问权限,无需手动干预。
底层原理:
- 对于第一次 API 调用,
get_token使用client_credentials授权凭证从 Adobe IMS 请求新的访问令牌。 - 令牌会缓存在内存中。 单个访问令牌会过期(通常为 24 小时),但这会为您自动处理。
- 当缓存的令牌在刷新缓冲时间内时(默认:过期时间前 60 秒),SDK 会使用相同的客户端凭据自动获取新的令牌。
- 不涉及刷新令牌。 客户端凭据本身就是长期有效的密钥,始终可用于生成新的访问令牌。
显式身份验证
如果您想主动获取令牌(例如,在启动时因错误凭据而快速失败):
Web 应用程序(授权代码)
将此用于用户使用其 Adobe ID 登录的服务器端应用程序。 此流需要客户端密钥,必须安全地将其存储在您的服务器上。
完整的 Flask 示例
单页面应用程序 / PKCE(授权代码 + PKCE)
将其用于无法安全存储客户端密钥的基于浏览器的应用程序、桌面应用程序或 CLI 工具。 此流使用 PKCE (RFC 7636) 来保护授权代码交换。
异步用法
每个身份验证类都有一个异步对应项,以 Async 为前缀。 上述代码示例包含适用的 Sync 和 Async 选项卡。
手动令牌刷新
对于 Web 应用程序和 SPA 流,SDK 通过 get_token 自动刷新令牌。 如果您需要显式控制,可以直接调用 refresh():
同步
异步
当您希望在关键操作之前强制刷新而不是依赖自动刷新缓冲区时,这样做非常有用。
令牌持久性
所有身份验证类都支持 export_tokens() 和 import_tokens() 来在重新启动时持久化令牌状态。 对于 Web 应用程序和 SPA 流程,这尤其重要,因为访问令牌和刷新令牌默认保存在内存中 — 如果您的应用程序重新启动,用户需要重新进行身份验证,除非您对这些令牌进行持久化。 对于服务器到服务器,持久性是可选的(客户端凭据始终可以生成新令牌),但导入缓存的令牌可以避免启动时出现额外的往返。
导出和导入
使用 on_token_refreshed 自动持久化
要在每次刷新时自动持久化令牌,请使用 on_token_refreshed 回调:
该回调接收与 export_tokens() 相同的字典结构,并在每次成功刷新令牌后触发。对于异步类,on_token_refreshed 可以是常规函数也可以是 async 函数。 两者均受支持。
撤销令牌
要注销用户并通过 Adobe IMS 使其令牌失效:
这会向 Adobe IMS 发出尽力撤销访问令牌和刷新令牌的请求,然后清除所有本地令牌状态。 撤销后,用户将需要重新进行身份验证。
对于异步类,请使用 await auth.revoke()。
错误处理
所有身份验证错误都继承自 FrameioAuthError,因此您可以广泛捕获它们或处理特定用例:
错误参考
在生产中处理过期的刷新令牌
对于 Web 应用程序和 SPA 流,刷新令牌最终会过期。当这种情况发生时,get_token 会引发 TokenExpiredError。 您应该捕获这个错误,并再次将用户重定向到授权流。
配置参考
所有授权类都接受这些可选参数:
参数参考
暂存环境
通过重写 ims_base_url 指向暂存的 Adobe IMS 实例。 如果您需要以编程方式引用生产值,SDK 还可以导出 DEFAULT_IMS_BASE_URL (https://ims-na1.adobelogin.com)。
自定义 HTTP 客户端
对于代理支持或自定义 TLS 配置:
线程安全
同步身份验证类是完全线程安全的。 当多个线程同时调用 get_token 且需要刷新时,只有一个线程会执行刷新。 其他线程会等待并接收相同结果。 无需外部锁定。 异步类使用 asyncio.Lock 提供相同的保证,对单个事件循环中的并发协程是安全的。