AWS Cognito认证+AWS移动客户端+API网关+S3存储桶



我使用AWSCognitoAuth为我的应用程序构建了一个登录屏幕,与提供的一个示例完全相同(https://github.com/awslabs/aws-sdk-ios-samples/tree/master/CognitoAuth-Sample)。这很好——它显示了SFSafariViewController实例中的登录屏幕,用户只需使用常规用户名+密码登录,或者通过Facebook或Google登录。因此,在这次身份验证之后,我获得了访问和刷新令牌,然后我可以使用这些令牌从我的API获取数据,该数据通过AWS API网关路由。相应的AWS API网关路由配置为使用"用户池"授权,而不是"IAM"。

但现在我需要从S3存储桶中下载一些文件,它不是公共的。因此,需要做的是获得临时AWS凭据并使用它们访问bucket。AWSMobileClient库和S3传输实用程序能够做到这一点。但我的问题是,我不知道如何告诉AWSMobileClient用户现在已经登录了。AWSMobileClient在appDelegate的didFinishLaunching:withOptions中初始化,如下所示:

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会以某种方式找到会话,并正确提取凭据,然后加载bucket中的文件。但我需要在用户登录后以某种方式手动触发它,我不能强迫用户退出并重新打开应用程序,而不是在2018年……我已经调试了很长时间,并在AWSMobileClient框架中进行了挖掘,试图找到如何将这两者连接在一起,但没有成功。我该怎么做?

但现在我需要从S3 bucket下载一些文件平民的因此,需要做的是获得临时AWS证书并使用它们访问存储桶。AWSMobileClient库使用S3传输实用程序可以做到这一点。但我的问题是不知道如何告诉AWSMobileClient用户现在已登录。AWSMobileClient在appDelegate的did完成启动:带选项

您是否已经尝试使用Pre-signed url?它旨在满足您的需求。它允许临时访问aws资源,在您的情况下可以访问S3 bucket。

您在这里有使用iOS sdk的示例,请查看S3TransferUtility示例

S3TransferUtility示例(Swift,Objective-C(。这是一个样品手机演示如何使用AmazonS3预签名URL的应用程序生成器在后台下载/上传文件。涉及AWS服务包括:

  • 亚马逊S3亚马逊
  • Cognito身份

希望它能有所帮助!

最新更新