Аутентификация AWS Cognito + мобильный клиент AWS + шлюз API + корзина S3 - PullRequest
0 голосов
/ 26 ноября 2018

Я создал экран входа в систему для своего приложения, используя AWSCognitoAuth, точно так же, как в одном из предоставленных примеров (https://github.com/awslabs/aws-sdk-ios-samples/tree/master/CognitoAuth-Sample). Это работает нормально - он показывает экран входа в систему в случае SFSafariViewController, когда пользователь просто входит в системупри использовании обычного имени пользователя + пароль или через Facebook или Google. Поэтому после этой аутентификации я получаю токены доступа и обновления, которые затем могу использовать для извлечения данных из моего API, который направляется через AWS API Gateway. Соответствующий AWS API Gatewayмаршруты настроены на использование авторизации «Пулы пользователей» вместо «IAM».

Но теперь мне нужно загрузить некоторые файлы из корзины S3, которая не является общедоступной. Так что нужно сделать, чтобыполучить временные учетные данные AWS и получить к ним доступ к корзине. Библиотека AWSMobileClient вместе с утилитой переноса S3 могут это сделать. Но моя проблема в том, что я не знаю, как сообщить AWSMobileClient о том, что у пользователя теперь естьвошедший в систему .AWSMobileClient инициализируется в didFinishLaunching:withOptions lik приложения.Вот что:

    let serviceConfiguration = AWSServiceConfiguration(
        region: .EUWest1,
        credentialsProvider: AWSMobileClient.sharedInstance().getCredentialsProvider()

    )

    //create a pool
    let configuration = AWSCognitoIdentityUserPoolConfiguration.init(clientId: CognitoIdentityUserPoolAppClientId, clientSecret: CognitoIdentityUserPoolAppClientSecret, poolId: CognitoIdentityUserPoolId)
    AWSCognitoIdentityUserPool.register(with: serviceConfiguration, userPoolConfiguration: configuration, forKey: AWSCognitoUserPoolsSignInProviderKey)


    AWSServiceManager.default().defaultServiceConfiguration = serviceConfiguration

    AWSFacebookSignInProvider.sharedInstance().setPermissions(["public_profile", "email"])
    AWSSignInManager.sharedInstance().register(signInProvider: AWSFacebookSignInProvider.sharedInstance())

    return AWSMobileClient.sharedInstance().interceptApplication(
        application,
        didFinishLaunchingWithOptions: launchOptions)

Дело в том, что когда я полностью закрываю приложение после входа в AWSCognitoAuth и снова открываю его, AWSMobileClient каким-то образом находит сеанс, и учетные данные выбираются правильно, а файл из корзины получаетзагружен.Но мне нужно как-то вызвать это вручную после того, как пользователь войдет в систему, я не могу заставить пользователя выйти и снова открыть приложение, не в 2018 году ... Я отлаживал это сейчас в течение долгого времени и копался в платформе AWSMobileClient,пытаясь найти, как соединить эти два вместе, но безуспешно.Как я могу это сделать?

1 Ответ

0 голосов
/ 27 ноября 2018

Но теперь мне нужно загрузить некоторые файлы из корзины S3, которая не является общедоступной.Поэтому необходимо получить временные учетные данные AWS и получить к ним доступ к корзине.Библиотека AWSMobileClient вместе с S3 Transfer Utility могут это сделать.Но моя проблема в том, что я не знаю, как сообщить AWSMobileClient о том факте, что пользователь теперь вошел в систему .AWSMobileClient инициализируется в didFinishLaunching appDelegate: withOptions

Вы уже пыталисьиспользовать Pre-signed url?Он предназначен для удовлетворения ваших требований.Это позволяет временный доступ к ресурсам aws, в вашем случае получите доступ к корзине S3.

У вас есть образцы, использующие iOS sdk здесь , проверьте S3TransferUtility-Sample .

S3TransferUtility-Sample(Swift, Objective-C).Это пример мобильного приложения, которое демонстрирует, как использовать предварительно созданный URL-адрес Amazon S3 для загрузки / выгрузки файлов в фоновом режиме.В число задействованных сервисов AWS входят:

  • Amazon S3 Amazon
  • Cognito Identity

Надеюсь, это поможет!

...