swift - Swift 中的 AWS Cognito getSession 导致来自 API GW 的 401 未授权
问题描述
当我们的应用程序启动时,我们会检查我们是否拥有有效的 AWS Cognito 令牌(id、refresh、access)。如果它们不再有效,我们使用 cognito IDP getSession 方法手动获取它们。
因为获取这些令牌需要一些时间,所以我们的应用程序继续进行 API 调用并从 API Gateway 获得 401 未授权响应。我们在向用户显示加载指示器的同时执行这些操作。
有没有办法让我们确保在进行 API 调用之前我们收到了有效的令牌?我们现在的技巧是,如果我们收到 401 未经授权的响应,我们会重试。这效率不高,因为我们在令牌刷新时浪费了一个(有时更多)API 调用。
我已经研究过使用 DispatchGroups (GCD) 和 DispatchQueue 但这对我们没有帮助。寻找有关我们如何进一步改进这一点的建议。下面是我们用来刷新令牌的代码:
func getTokens(){
self.user?.getSession().continueOnSuccessWith { (task) -> AnyObject? in
DispatchQueue.main.async(execute: {
let idTok = task.result?.idToken?.tokenString ?? "ERR"
... handle received tokens ...
})
return nil
}
}
旁注:我们正在将“AWSCognitoIdentityProvider”导入我们的应用程序,我的理解是它应该自动更新令牌,但我没有看到这种行为。但是,当我们运行 getTokens() 函数时,它有时会从 Cognito 获取最新的令牌,有时会提供缓存的结果。
解决方案
我能够通过触发 AWSTask 中的下一个函数来解决这个问题。不理想但有效。
推荐阅读
- r - 关于读取保存在 rda 文件中的数据信息
- r - 将数据行重塑为两列
- c# - 在 JArray 中使用 LINQ
- angular - 在 Angular 中处理异步和可观察的问题
- java - 我应该如何通过Python调用java脚本中的函数
- r - 如何在 R 中的组内汇总和计算非缺失、非零和非唯一值?
- python - tensorflow-gpu 安装在 ubuntu 18 上失败“InvalidArchiveError('存档错误 /anaconda/pkgs/cudatoolkit-10.1.243-h6bb024c_0.tar.bz2。”
- istio - Istio:当我启用 JWT RequestAuthentication 时,健康检查/sidecar 失败
- pca - 使用 PCA 时的大量主成分
- cmake - 由 sub_directory 二进制文件自动生成的 globbing 文件