iOS AWS AppSync 401 IAM + Cognito
Posted
技术标签:
【中文标题】iOS AWS AppSync 401 IAM + Cognito【英文标题】: 【发布时间】:2020-03-20 13:50:36 【问题描述】:您好,我使用 AWS AppSync 作为后端 graphQL 数据库。 我正在使用 Cognito 来管理登录、用户和身份验证。 我正在使用 IAM 来管理身份规则和来宾用户。
这是我的初始化代码:
let appSyncConfig = try AWSAppSyncClientConfiguration(appSyncServiceConfig: AWSAppSyncServiceConfig(),
credentialsProvider: AWSMobileClient.default(),
cacheConfiguration: AWSAppSyncCacheConfiguration())
// Initialize the AWS AppSync client
let appSyncClient = try AWSAppSyncClient(appSyncConfig: appSyncConfig)
appSyncClient.apolloClient?.cacheKeyForObject = $0["id"]
注意:: 我使用默认配置,因为所有必需的信息都在awsconfiguration.json
文件中
我正在使用 cognito 的以下功能来注册用户:
AWSCognitoIdentityUserPool.signUp
并按照电话号码验证,完成后我使用 AWSMobileClient 登录:
AWSMobileClient.default().signIn
问题是:
登录后,所有 AppSync 查询/突变都可以正常工作但是
任意时间后(通常为 5 分钟)或重新启动应用程序时
任何需要授权的 AppSync 查询/突变返回 401(未授权)。
这个问题一直持续到(我认为)下次刷新访问/ID 令牌时(我们的配置 1.5 小时),并且在(5 分钟或重新启动)后问题再次出现。
【问题讨论】:
【参考方案1】:当您收到未经授权的 401 时,您应该提示用户重新登录。如果这种情况非常频繁且意外地发生,则 SDK 中可能存在错误。
随时通过https://github.com/awslabs/aws-mobile-appsync-sdk-ios/issues 提出问题,以更好地帮助调试您的问题。
【讨论】:
以上是关于iOS AWS AppSync 401 IAM + Cognito的主要内容,如果未能解决你的问题,请参考以下文章
AppSync 与 AWS4 和混合身份验证类型(UserPools 和 IAM)
AppSync:使用 AWS_IAM 身份验证时在 $context 中获取用户信息
具有 Cognito 联合身份的 AWS AppSync IAM 授权
AWS AppSync GraphQL 读取策略没有任何效果