反模式:不为 OAuth 令牌设置到期时间

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

Apigee Edge 提供了 OAuth 2.0 框架, 安全 API。OAuth2 是一种最常用的基于令牌的开放标准身份验证和授权方案之一。它允许客户端应用代表用户访问 API,而无需用户泄露用户名和密码。

Apigee Edge 允许开发者通过实现任意一种 API 方式来生成访问令牌和/或刷新令牌, 四种 OAuth2 授权类型 客户端凭据password隐式授权代码 - 使用 OAuthv2 政策。 客户端应用使用访问令牌来消耗安全 API。每个访问令牌都有自己的到期时间 该时间可在 OAuthv2 政策中进行设置。

对于某些授权类型,您可以随刷新令牌一起发出访问令牌。在原始访问令牌过期或被撤消后,刷新令牌可用于获取新的有效访问令牌。您还可以在 OAuthv2 政策中设置刷新令牌的到期时间。

这种反模式与 设置较长的有效期 使用 OAuth 令牌

反模式

OAuthv2 政策中,未设置刷新令牌的到期时间 会导致 OAuth 令牌累积,并增加 Cassandra 节点上的磁盘空间使用量。

以下示例 OAuthV2 政策显示了缺少针对 <RefreshTokenExpiresIn>:

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <!--<RefreshTokenExpiresIn> is missing -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

在上面的示例中:

  • 访问令牌的到期时间合理短于 30 分钟。
  • 未设置刷新令牌的到期时间。
  • 刷新令牌会永久保留在数据存储区 (Cassandra) 中,导致数据 累积。
  • 创建时没有到期时间的刷新令牌可无限期用于生成访问令牌。
  • 如果此 API 的流量为每秒 10 个请求,则最多可生成 864,000 个令牌 。

影响

  • 如果创建的刷新令牌没有设置过期日期,会有两个主要后果: <ph type="x-smartling-placeholder">
      </ph>
    • 刷新令牌可在未来(可能多年)的任何时间使用,以获取访问权限 令牌。这可能会带来安全隐患。
    • Cassandra 中包含刷新令牌的行永远不会被删除。 这会导致 Cassandra 中累积数据。
  • 如果您不使用刷新令牌 而是要创建新的刷新令牌和访问令牌 较旧的刷新令牌仍会保留在 Cassandra 中。因此,请刷新 令牌数量将继续在 Cassandra 中累积,进一步增加其膨胀程度, 增加磁盘使用量,加大压缩力,最终会导致读/写 提升 Cassandra 中的延迟时间。

最佳做法

为刷新令牌和访问令牌使用较短的有效期。请参阅 最佳实践 用于设置有效期 刷新和访问令牌的次数。确保为这两项访问权限指定到期配置 和刷新令牌请参阅 OauthV2 政策文档 ,详细了解政策配置。

专为 Private Cloud 客户打造的 Edge 最佳实践

本部分介绍了专门针对 Private Cloud 客户的 Edge 的最佳做法。

指定默认的刷新令牌到期时间

默认情况下,如果政策配置中未指定刷新令牌到期时间, Edge 会创建一个没有任何到期时间的刷新令牌。您可以通过以下方法替换此行为: 具体步骤如下:

  1. 在消息处理器节点上,修改或创建配置替换文件 $APIGEE_ROOT/customer/application/message-processor.properties。请确保此文件 可供 apigee 用户读取。
  2. 将以下代码行添加到该文件:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
    如果政策中未指定刷新令牌的到期时间,此设置会将默认刷新令牌的到期时间设置为 1 小时。 您可以根据自己的业务需求更改此默认值。
  3. 重启消息处理器服务:
    apigee-service edge-message-processor restart
  4. 在所有消息处理器节点中逐一重复上述步骤。

Cassandra 中的最佳实践

尝试升级到公开发布的 Apigee 的最新版本。Apigee 继续 发布修复和增强功能,继续改善和优化管理 提供大量令牌在 Apigee 中,访问令牌和刷新令牌存储在 Cassandra 中 “kms”键空间内的值。您应该确保此资源的压缩策略 键空间设为 LeveledCompactionStrategy。 您应检查是否存在以下索引: <ph type="x-smartling-placeholder">
    </ph>
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 和
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx

您还可以 表中的“kms.oauth_20_access_tokensgc_grace_seconds 从默认的 10 天 值(例如 3 天),以确保因令牌被删除而生成的 Tombstone 从数据存储区中完全清除的速度更快。

深入阅读