如何在Swift中通过AWSCognito实现Facebook Access Token登录?
用Facebook Access Token登录AWS Cognito的后续步骤
我之前刚好完成过这个流程,你的代码已经搭好了基础,接下来可以按以下步骤继续实现:
1. 关联Facebook凭证到Cognito提供者
你已经定义了包含Facebook Access Token的provider字典,接下来需要把它赋值给Cognito凭证提供者的logins属性,这样Cognito就能识别这个第三方身份:
credentialProvider.logins = provider
2. 配置AWS服务全局设置
需要用你的凭证提供者创建AWS服务配置,并设置为默认配置,这样后续调用其他AWS服务时会自动使用这个凭证:
let serviceConfig = AWSServiceConfiguration(region: .EUWest2, credentialsProvider: credentialProvider) AWSServiceManager.default().defaultServiceConfiguration = serviceConfig
3. 获取Cognito身份ID与临时AWS凭证
接下来调用Cognito的API获取身份ID和临时凭证,这一步完成后就可以用这些凭证访问S3、DynamoDB等其他AWS服务了:
// 获取身份ID credentialProvider.getIdentityId().continueWith { task in if let error = task.error { print("获取Cognito身份ID失败:\(error.localizedDescription)") return nil } // 成功获取身份ID guard let identityId = credentialProvider.identityId else { print("无法获取身份ID") return nil } print("Cognito身份ID:\(identityId)") // 可选:获取临时AWS访问凭证 credentialProvider.getCredentialsWithCompletionHandler { credentials, error in if let error = error { print("获取AWS临时凭证失败:\(error.localizedDescription)") return } guard let awsCredentials = credentials else { print("未获取到AWS凭证") return } // 这里可以拿到临时的Access Key、Secret Key和Session Token print("Access Key: \(awsCredentials.accessKey)") print("Secret Key: \(awsCredentials.secretKey)") print("Session Token: \(awsCredentials.sessionToken)") } return nil }
关键注意事项
- 确保你的Cognito身份池已经启用Facebook作为身份提供者,并且在Facebook开发者后台配置了Cognito提供的OAuth重定向URI(可以在Cognito身份池的第三方提供者设置里找到)
- 检查你的Facebook Access Token是否包含必要权限(比如
openid、email),如果需要获取用户的基本信息,还需要申请对应权限 - 后续要处理Facebook Access Token过期的情况:当Facebook token过期后,需要重新获取新的token,然后更新
credentialProvider.logins并重新获取Cognito凭证
内容的提问来源于stack exchange,提问作者David Henry
相关产品推荐
相关产品推荐

