AWS WAF 移动软件开发工具包的工作原理
本节介绍了 AWS WAF 移动软件开发工具包的类、属性和操作是如何协同工作的。
移动软件开发工具包为您提供可配置的令牌提供程序,可用于令牌检索和使用。令牌提供程序会验证您允许的请求是否来自合法客户。当您向使用 AWS WAF 保护的 AWS 资源发送请求时,您会在 Cookie 中包含令牌,以验证请求。您可以手动处理令牌 Cookie,也可以让令牌提供程序为您处理。
本节介绍移动软件开发工具包中包含的类、属性和方法之间的交互。有关软件开发工具包规范,请参阅 AWS WAF 移动软件开发工具包规范。
令牌检索和缓存
在移动应用程序中创建令牌提供程序实例时,您可以配置您希望它如何管理令牌和令牌检索。您的主要选择是如何维护有效的、未过期的令牌,以便在应用的 Web 请求中使用:
-
启用后台刷新 – 这是默认设置。令牌提供程序会在后台自动刷新令牌并将其缓存。启用后台刷新后,当您调用
getToken()
时,该操作将检索缓存的令牌。令牌提供程序以可配置的时间间隔执行令牌刷新,以便在应用程序处于活动状态时,缓存中始终有未过期的令牌可用。当您的应用程序处于非活动状态时,后台刷新会暂停。有关此问题的信息,请参阅 在应用程序处于非活动状态后检索令牌。
-
禁用后台刷新 – 您可以禁用后台令牌刷新,然后仅按需检索令牌。按需检索的令牌不会被缓存,您可以根据需要检索多个令牌。每个令牌都独立于您检索的任何其他令牌,并且每个令牌都有自己的时间戳,用于计算到期时间。
禁用后台刷新后,您可以选择以下令牌检索:
-
getToken()
– 在禁用后台刷新的情况下调用getToken()
时,调用会同步从 AWS WAF 获取一个新标记。这可能是一个阻塞调用,如果在主线程上调用,可能会影响应用程序的响应速度。 -
onTokenReady(WAFTokenResultCallback)
– 此调用异步检索新令牌,然后在令牌准备就绪时在后台线程中调用提供的结果回调。
-
令牌提供程序如何重试失败的令牌检索
检索失败时,令牌提供程序会自动重试令牌检索。重试最初是使用指数回退来执行的,起始重试等待时间为 100 ms。有关指数重试的信息,请参阅 AWS 中的错误重试和指数回退。
当重试次数达到配置的 maxRetryCount
时,令牌提供程序要么停止尝试,要么切换为每 maxErrorTokenRefreshDelayMsec
毫秒尝试一次,具体取决于令牌检索的类型:
-
onTokenReady()
– 令牌提供程序切换到两次尝试之间的等待maxErrorTokenRefreshDelayMsec
毫秒,并继续尝试检索令牌。 -
后台刷新 – 令牌提供程序切换到两次尝试之间的等待
maxErrorTokenRefreshDelayMsec
毫秒,并继续尝试检索令牌。 -
禁用后台刷新时按需
getToken()
调用 – 令牌提供程序停止尝试检索令牌并返回之前的令牌值,如果没有以前的令牌,则返回空值。
在应用程序处于非活动状态后检索令牌
仅当您的应用类型被视为处于活动状态时,才会执行后台刷新:
-
iOS – 当应用程序位于前台时,将执行后台刷新。
-
Android – 无论是在前台还是在后台,都是在应用程序未关闭时执行后台刷新。
如果您的应用程序处于任何不支持后台刷新的状态的时间超过您配置的 tokenRefreshDelaySec
秒数,则令牌提供程序会暂停后台刷新。例如,对于 iOS 应用程序,如果 tokenRefreshDelaySec
为 300 并且应用程序关闭或进入后台超过 300 秒,则令牌提供程序将停止刷新令牌。当应用程序恢复到活动状态时,令牌提供程序会自动重新启动后台刷新。
当您的应用程序恢复到活动状态时,请调用 onTokenReady()
,以便在令牌提供程序检索并缓存新令牌时通知您。不要随便调用 getToken()
,因为缓存中可能还不包含当前有效的令牌。