您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 info
Apigee Edge 提供 OAuth 2.0 框架 来 保护 API。OAuth2 是一种最常用的基于令牌的开放标准身份验证和 授权方案之一。它允许客户端应用代表用户访问 API,而无需用户泄露用户名和密码。
Apigee Edge 允许开发者通过实现四种 OAuth2 授权类型(客户端凭据、密码、隐式和授权代码)中的任意一种,使用 OAuthv2 政策生成访问权限和/或刷新令牌。客户端应用使用访问令牌来消耗安全 API。每个访问令牌都有自己的有效期 ,您可以在OAuthv2 政策中设置有效期。
对于某些授权类型,您可以随刷新令牌一起发出访问令牌。在原始访问令牌过期或 被撤消后,刷新 令牌可用于获取新的有效访问令牌。也可在OAuthv2 政策中设置刷新令牌的有效期。
反模式
在 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 for Private Cloud 客户的最佳实践
本部分介绍了专门针对 Edge for Private Cloud 客户的最佳实践。
指定默认刷新令牌有效期
默认情况下,如果在政策配置中未指定刷新令牌有效期,Edge 会创建没有有效期的刷新令牌。您可以通过 以下过程替换此行为:
- 在消息处理器节点上,修改或创建配置替换文件
$APIGEE_ROOT/customer/application/message-processor.properties。确保此文件可供apigee用户读取。 - 将以下代码行添加到该文件:
如果政策中未指定任何有效期,这将把默认刷新令牌有效期设置为 1 小时。 您可以根据业务需求更改此默认值。conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- 重启消息处理器服务:
apigee-service edge-message-processor restart
- 在所有消息处理器节点中逐一重复上述步骤。
Cassandra 中的最佳实践
尝试升级到公开提供的最新版本的 Apigee。Apigee 会不断发布修复程序和增强功能,以不断改进和优化 Apigee 中的令牌管理。在 Apigee 中,访问令牌和刷新令牌存储在“kms”命名空间内的 Cassandra 中。您应确保此 命名空间的压缩策略设置为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 天),以确保因删除令牌而生成的墓碑更快地从数据存储区中清除。