什么是离线访问 (Offline access)?
离线访问 (Offline access) 的概念可能因上下文而异,我们将重点关注 OAuth 2.0 和 OpenID Connect (OIDC) 规范。在此上下文中,离线访问 (Offline access) 允许客户端使用 刷新令牌 (refresh token) 获取新的 访问令牌 (access tokens) ,而不需要用户重新进行认证 (authenticate)。此功能对于长时间会话和更好的用户体验尤其有用。
值得注意的是,OAuth 2.0 没有明确定义“离线访问 (offline access)”一词;它只指定使用刷新令牌 (refresh token) 来获取新的访问令牌 (access tokens)。然而,“离线访问 (offline access)”这一术语(以及 offline_access
scope)已在业界被广泛采用来指代这一能力,并在 OpenID Connect (OIDC) 规范中被正式定义。
离线访问 (Offline access) 如何工作?
为简单起见,我们将使用 OAuth 2.0 术语 授权请求 (Authorization request) 和 授权服务器 (Authorization server) 来说明离线访问 (offline access) 如何工作。它们在 OIDC 中的替代术语分别是 认证请求 (Authentication request) 和 OpenID 提供者 (OpenID Provider, OP) 。
利用离线访问 (offline access) 涉及两个主要步骤:
-
请求离线访问 (offline access):当 客户端 (Client) 向授权服务器 (authorization server) 发起授权请求 (authorization request) 时,它包含
offline_access
scope 以请求离线访问 (offline access)。此 scope 表示客户端希望获得一个刷新令牌 (refresh token) 以及访问令牌 (access token)。离线访问 (offline access) 的支持可能因授权服务器 (authorization server) 而异,且授权服务器可能会忽略
offline_access
scope 如果它不支持该功能。在使用此 scope 之前,请参阅授权服务器的文档以确保兼容性。 -
使用刷新令牌 (refresh token):一旦 OAuth 2.0 授权 (Grant) 完成,客户端应收到一个 刷新令牌 (refresh token) 以及 访问令牌 (access token) 。客户端可以安全地存储刷新令牌,并在当前访问令牌过期时使用它向授权服务器发送 令牌请求 (token request) 以获取新的访问令牌 (access token)。
有关离线访问 (offline access) 实际操作的详细示例,请参阅 刷新令牌 (Refresh token) 文章。
安全考虑
离线访问 (offline access) 的安全影响类似于刷新令牌 (refresh token)。有关详细信息,请参阅刷新令牌 (refresh token) 的 安全考虑 部分。