批准和撤消访问令牌

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

撤消访问令牌和刷新令牌

在某些情况下,应用需要明确撤消令牌或使令牌失效,例如用户退出支持 OAuth 的应用。撤消令牌后,您可以在其过期前随时重新批准它。

令牌撤消流程由 OAuth 2.0 令牌撤消规范定义。

Apigee Edge 提供 InvalidateToken 操作,可让您配置专用的令牌撤消端点。您发布此端点的 URI 后,应用开发者可以使 Edge 颁发的令牌失效。

以下是 OAuthV2 政策和 InvalidateToken 操作的配置示例。在此示例中,访问令牌及其关联的刷新令牌都会被撤消。从技术上说,这些标记都被撤消,因为级联标志被设置为 true。如需详细了解级联标志的工作原理,请参阅下面的令牌元素的属性部分。

<OAuthV2 name="InvalidateToken">
  <Operation>InvalidateToken</Operation>
  <Tokens>
    <Token type="accesstoken" cascade="true">flow.variable</Token>
  </Tokens>
</OAuthV2>

<Tokens>/<Token> 元素

标识指定要撤消的令牌的流变量。例如,开发者要使用名为 access_token 的查询参数提交撤消请求,则正确的流变量为:request.queryparam.access_token。例如,如需在 HTTP 标头中提供令牌,请将此值设置为 request.header.access_token

特性

  • type(必需,字符串):由指定的变量标识的令牌类型。支持的值包括 accesstokenrefreshtoken:
    • 要撤消访问令牌,请指定 accesstoken 类型。
    • 要同时撤消访问令牌和刷新令牌,请指定 refreshtoken 类型。当 Edge 看到类型 refreshtoken 时,它会假定该令牌是刷新令牌。如果找到了该刷新令牌,则它会被撤消。如果未找到该刷新令牌,Edge 会检查它是否为访问令牌。如果访问令牌存在,则它会被撤消。

      注意:如果您将已失效的令牌传递给 InvalidateToken 政策,您可能预期该政策会返回错误,但实际上并不会。此类操作无效。
  • cascade(可选,布尔值,默认值:true)此特性的主要用途是撤消刷新令牌,而不撤消其关联的访问令牌。考虑以下情况:
    • 仅撤消刷新令牌,不撤消其关联的访问令牌。为此,请将 <Token> 类型设置为 refreshtoken,并将 cascade 设置为 false
    • 同时撤消访问令牌和刷新令牌。为此,请将 <Token> 类型设置为 accesstoken。cascade 的值可以是 true(默认值)或 false。如果将其设置为 true,则访问令牌和刷新令牌都会被撤消。如果将其设置为 false,则访问令牌会被撤消,并且刷新令牌不可用。请参阅以下备注了解详细说明。
    • 撤消访问令牌,并且不撤消其关联的刷新令牌。不支持。请参阅以下备注了解详细说明。

注意:出于安全原因,如果您撤消访问令牌,关联的刷新令牌也会被撤消。因此,您不能使用级联特性来仅撤消访问令牌。例如,如果您将 <Token> 类型设置为 accesstoken,并设置 cascade=false,则访问令牌会按预期被撤消;但关联的刷新令牌将不可用。它无法用于刷新已撤消的访问令牌。级联特性的主要用例是,您只想撤消刷新令牌。在这种情况下,请将 <Token> 类型设置为 refreshtoken,并设置 cascade=false。刷新令牌将被撤消,但其关联的访问令牌将保持有效(直到令牌过期或被撤消)。如需了解详情,请参阅此社区论坛讨论

批准访问令牌和刷新令牌

使用 ValidateToken 操作来“重新批准”已撤消的令牌。也就是说,当您应用此操作时,目标访问或刷新令牌的状态会从“已撤消”更改为“已批准”。您可以验证任何未过期的已撤消令牌。

<OAuthV2 name="ValidateToken">
  <Operation>ValidateToken</Operation>
  <Tokens>
    <Token type="refreshtoken" cascade="true">flow.variable</Token>
  </Tokens>
</OAuthV2>

<Tokens>/<Token> 元素

标识指定要验证的令牌的流变量。例如,开发者要使用名为 access_token 的查询参数提交验证请求,则正确的流变量为:request.queryparam.access_token。例如,如需在 HTTP 标头中提供令牌,请将此值设置为 request.header.access_token

特性

  • type(必需,字符串)由指定的变量标识的令牌类型。支持的值包括 accesstokenrefreshtoken
  • cascade(可选,布尔值):默认情况下,此选项设置为 true,这会使验证传播到关联的令牌。因此,如果应用于刷新令牌,其关联的访问令牌也会被验证。如果应用于访问令牌,其关联的刷新令牌也会被验证。如果将此选项设置为 false,则仅验证指定的访问令牌或刷新令牌。