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 读取策略没有任何效果

如何使用 IAM Auth 将 python websocket 连接到 AppSync 订阅?

AWS GraphQL Appsync - 无法担任角色