Загрузка AWSS3TransferUtility с проблемами конфигурации аутентификации Cognito? - PullRequest
0 голосов
/ 15 марта 2020

У меня есть приложение, которое проходит проверку подлинности с помощью Cognito и работает нормально. Теперь мне нужно повторно использовать аутентификацию и вернуть токен для загрузки файлов на S3. Насколько я понимаю, AWSS3TransferUtility - это путь к go на данный момент. Только непонятно, что нужно сделать и как передать токен на S3? Кто-нибудь может указать на пример? Просто использование доступных примеров, предлагающих сделать:

let credentialsProvider = 
CredentialsProvider(regionType:region, identityPoolId:poolId)
let serviceS3Configuration = AWSServiceConfiguration(region:region, credentialsProvider: credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = serviceS3Configuration

приводит к «Неаутентифицированному доступу для этого пула идентификаторов», при условии, что это происходит из-за того, что токен не используется и служба S3 AWS не инициализирована правильно , Но я не вижу способ установить это? что мне не хватает? Я вижу некоторые примеры, предлагающие установить для свойства входа в систему credentialsProvider значение AWSCognitoLoginProviderKey, но на данный момент он выглядит устаревшим. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 15 марта 2020

Конфигурация S3 с Cognito немного загадочна. Ответы есть в документации, но не совсем очевидны. Ядром работы этого является регистрация вашего AWSMobileClient экземпляра в конфигурации.

Упрощенный код без проверки ошибок:

Загрузите ваш AWSMobileClient:

AWSMobileClient.sharedInstance().initialize({ { userstate, error in
    if userstate != nil {
        registerAuthentication(credentialsProvider: AWSMobileClient.sharedInstance())
    }
})

После завершения передачи sharedInstance в AWSServiceConfiguration, поскольку AWSMobileClient -a AWSCredentialsProvider

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)
    }
}

и после того, как регистрация фактически завершена, вы можете получить доступ к утилите передачи через строку общего ключа.

lazy var transferUtility: AWSS3TransferUtility = {
    let utility = AWSS3TransferUtility.s3TransferUtility(forKey: DefaultTransferUtilityKey)
    return utility
}()

Имя корзины и регион также могут быть строками но если вы используете AWSMobileClient, возможно, у вас есть настройка plist.

...