首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWSS3TransferUtility上传与Cognito身份验证配置问题?

AWSS3TransferUtility上传与Cognito身份验证配置问题?
EN

Stack Overflow用户
提问于 2020-03-16 01:59:02
回答 1查看 284关注 0票数 0

我有一个可以通过Cognito进行身份验证的应用程序,并且一直运行良好。现在我需要重用身份验证和返回的令牌来将文件上传到S3。我的理解是,在这一点上,AWSS3TransferUtility是可行的。只是不清楚需要做什么,以及如何将令牌传递给S3?谁能举个例子?只需使用可用的示例建议做:

代码语言:javascript
复制
let credentialsProvider = 
CredentialsProvider(regionType:region, identityPoolId:poolId)
let serviceS3Configuration = AWSServiceConfiguration(region:region, credentialsProvider: credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = serviceS3Configuration

导致“此身份池不支持未经身份验证的访问”,假设这是因为未使用令牌并且S3 AWS服务未正确初始化。但是我看不到有什么方法可以设置它吗?我遗漏了什么?我可以看到一些示例建议将credentialsProvider的登录属性设置为AWSCognitoLoginProviderKey,但在这一点上似乎已经过时了。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-03-16 03:00:16

使用Cognito进行S3配置有点神秘。答案在文档中,但并不是完全显而易见。使其正常工作的核心是在配置中注册AWSMobileClient实例。

没有错误检查的简化代码:

启动你的AWSMobileClient

代码语言:javascript
复制
AWSMobileClient.sharedInstance().initialize({ { userstate, error in
    if userstate != nil {
        registerAuthentication(credentialsProvider: AWSMobileClient.sharedInstance())
    }
})

完成后,将sharedInstance传递给AWSServiceConfiguration,因为AWSMobileClient是-a AWSCredentialsProvider

代码语言:javascript
复制
let DefaultTransferUtilityKey = "DEFAULT_AUTH_KEY"
func registerAuthentication(credentialsProvider: AWSCredentialsProvider) {
    /// only do this once per app launch 

    /// assumes you're using the plist config method
    guard let s3tranferInfo = AWSInfo.default().defaultServiceInfo("S3TransferUtility"),
        let bucketName = s3tranferInfo.infoDictionary["Bucket"] as? String else {
            assertionFailure("failed to load /S3TransferUtility/Bucket key  - is awsconfiguration.json correct ?")
            return
    }

    let transferConfig = AWSS3TransferUtilityConfiguration()
    transferConfig.bucket = bucketName
    if let serviceconfiguration = AWSServiceConfiguration(region: s3tranferInfo.region, credentialsProvider: credentialsProvider) {
        AWSS3TransferUtility.register(with: serviceconfiguration, transferUtilityConfiguration: transferConfig, forKey: DefaultTransferUtilityKey)
    }
}

一旦注册实际完成,您就可以通过公共密钥字符串访问传输实用程序。

代码语言:javascript
复制
lazy var transferUtility: AWSS3TransferUtility = {
    let utility = AWSS3TransferUtility.s3TransferUtility(forKey: DefaultTransferUtilityKey)
    return utility
}()

存储桶名称和区域也可以是字符串,但是如果您使用的是AWSMobileClient,那么您可能已经设置了plist。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60695995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档