您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档。 信息
Apigee Edge 提供 OAuth 2.0 框架来保护 API。OAuth2 是一种最常用的基于令牌的开放标准身份验证和授权方案之一。它允许客户端应用代表用户访问 API,而无需用户泄露用户名和密码。
借助 Apigee Edge,开发者可以使用 OAuthv2 政策实现四种 OAuth2 授权类型(客户端凭据、密码、隐式和授权代码)中的任意一种,从而生成访问和/或刷新令牌。客户端应用使用访问令牌来消耗安全 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 个令牌。
影响
- 如果创建的刷新令牌没有到期时间,则会产生两个主要后果:
- 刷新令牌可在将来的任何时间(可能多年)使用,以获取访问令牌。这可能会带来安全影响。
- Cassandra 中包含刷新令牌的行永远不会被删除。这会导致数据在 Cassandra 中累积。
- 如果您不使用刷新令牌获取新的访问令牌,而是创建新的刷新令牌和访问令牌,则旧的刷新令牌将保留在 Cassandra 中。因此,刷新令牌在 Cassandra 中将继续累积,进一步增加膨胀、增加磁盘使用量并加重压缩力度,最终会导致 Cassandra 中出现读/写延迟。
最佳做法
为刷新令牌和访问令牌使用适当的较短到期时间。如需了解如何设置刷新令牌和访问令牌的到期时间,请参阅最佳做法。请务必在政策中为访问令牌和刷新令牌指定到期配置。如需详细了解政策配置,请参阅 OauthV2 政策文档。
专门针对适用于私有云客户的 Edge 客户的最佳实践
本部分介绍专门针对适用于私有云客户的 Edge 客户的最佳做法。
指定默认的刷新令牌到期时间
默认情况下,如果政策配置中未指定刷新令牌到期时间,Edge 会创建没有任何到期时间的刷新令牌。您可以按照以下过程替换此行为:
- 在消息处理器节点上,修改或创建配置替换文件
$APIGEE_ROOT/customer/application/message-processor.properties
。请确保apigee
用户可以读取此文件。 - 将以下代码行添加到该文件中:
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
如果政策中未指定刷新令牌,这会将默认刷新令牌到期时间设置为 1 小时。 您可以根据业务需求更改此默认价值。 - 重启消息处理器服务:
apigee-service edge-message-processor restart
- 在所有消息处理器节点中逐一重复上述步骤。
Cassandra 的最佳实践
尝试升级到公开发布的最新版本 Apigee。Apigee 会继续发布修复和增强功能,从而不断改善和优化 Apigee 中的令牌管理。在 Apigee 中,访问令牌和刷新令牌存储在 Cassandra 的“kms”键空间内。您应确保此键空间的压缩策略设置为LeveledCompactionStrategy
。您应检查确认以下索引不存在:
- 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_tokens
中的 gc_grace_seconds
从默认值 10 天减少到较低的值(例如 3 天),以确保更快地从数据存储区中清除因删除令牌而生成的 Tombstone。