AWS Amplify iOS联邦登录报cognitoIdentityPoolNotConfigured错误
问题产生原因
- 现有
awsconfiguration.json是Amplify CLI 0.1.0版本生成的旧格式配置,新版AWSMobileClient SDK对带旧版本号标记的配置会使用过时的解析逻辑,无法正确读取CredentialsProvider节点下的Cognito身份池配置,直接抛出找不到有效身份池的错误。 - 配置存在不合规项:在面向客户端的配置文件中写入了Cognito用户池的
AppClientSecret字段,该字段仅允许存储在后端服务侧,客户端SDK识别到该字段时会判定配置无效,直接跳过配置加载流程。 - 代码缺失SDK初始化步骤:未等AWSMobileClient完成初始化、完成配置文件解析就直接调用
federatedSignIn接口,此时SDK还未加载到配置内容,也会触发该报错。 - 配置文件打包配置错误:如果
awsconfiguration.json没有被加入Xcode主target的Copy Bundle Resources构建阶段,App运行时SDK找不到配置文件,同样会返回该错误。
修复方案
按以下步骤逐一排查调整:
- 修正配置文件格式与内容
替换为SDK可识别的新版配置结构,移除不需要的用户池配置和敏感的ClientSecret字段,参考配置如下:{ "UserAgent": "aws-amplify-cli/2.0", "Version": "1.0", "CredentialsProvider": { "CognitoIdentity": { "Default": { "PoolId": "替换为你实际使用的Cognito身份池ID,即原配置中us-east-1:开头的字符串", "Region": "us-east-1" } } }, "Auth": { "Default": { "authenticationFlowType": "CUSTOM_AUTH" } } }如果你仅实现SAML联邦登录、不使用Cognito用户池的账号密码登录能力,不需要保留
CognitoUserPool相关配置节点,避免额外的配置冲突。 - 检查配置文件打包状态
打开Xcode项目配置,进入主target的Build Phases标签页,展开Copy Bundle Resources列表,确认awsconfiguration.json在列表中;如果不存在就手动拖入,勾选对应target的引用。 - 补全SDK初始化逻辑
在调用联邦登录接口前,必须先调用AWSMobileClient的初始化方法,等初始化回调完成、无报错后再执行登录逻辑,调整后的代码参考:let awsClient = AWSMobileClient.default() awsClient.initialize { _, initError in if let initError = initError { print("SDK初始化失败: \(initError.localizedDescription)") return } awsClient.federatedSignIn( providerName: Configuration.current.awsSAMLProvider, token: token ) { userState, signInError in if let signInError = signInError { print("联邦登录失败: \(signInError.localizedDescription)") return } guard let userState = userState else { return } print("当前登录状态: \(userState.rawValue)") awsClient.getAWSCredentials { creds, credError in if let credError = credError { print("获取临时凭证失败: \(credError.localizedDescription)") return } guard creds != nil else { return } onComplete(.success) } } } - 校验控制台侧配置
进入Cognito联邦身份池控制台,确认你配置的身份池ID真实存在,且已经在身份池的身份提供商配置中添加了你使用的SAML提供商,提供商名称和代码中传入的providerName完全一致,避免后续换发临时凭证失败。
内容的提问来源于stack exchange,提问作者Nilesh Tupe
相关产品推荐
相关产品推荐

