ios - AWS IOS SDK 身份验证

标签 ios swift amazon-web-services amazon-s3 amazon-cognito

我是 ios 开发的新手,我正在尝试将 AWS 集成到用 Swift 编写的移动应用程序中。我使用以下代码连接文件并将文件上传到 s3:

let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "us-east-1:xxxx")
let serviceConfiguration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = serviceConfiguration

var uploadRequest = AWSS3TransferManagerUploadRequest()
uploadRequest.bucket = "my-bucket" // Bucket where the file is uploaded
uploadRequest.key = "myFile.txt" // The file's name on s3
uploadRequest.body = getFileURL() // The file's path on my computer

var transferManager = AWSS3TransferManager.defaultS3TransferManager()
transferManager.upload(uploadRequest).continueWithBlock({
    (task: BFTask!) -> BFTask! in
    if(task.error != nil){
      println("Couldn't upload the file");
      println(task.error.code)
      println(task.error.localizedDescription)
      }
      return nil
})

这符合我的预期,它将 myFile.txt 上传到 s3。但它是通过 unauth 角色实现的,我已授予该角色“s3:*”权限。我想将这些操作限制为经过身份验证的角色。在 AWS 的文档中,解决方案涉及使用 Facebook、Twitter、Amazon、Google 等或使开发人员经过身份验证。

我很难让开发人员验证身份,因为所有文档都在 objective-c 或 java 中。所以现在我正在尝试寻找替代方案。是否可以使用 accessKey、secretKey 对进行身份验证?还是有其他验证方式?

如果没有这样的方法,我应该如何实现开发人员身份验证?

class DevAuthProvider: AWSAbstractCognitoIdentityProvider{
var _token: String!
var _logins: [NSObject : AnyObject ]!
var someURL: String!

override var token: String {
    get {
        return _token
    }
}

override var logins: [NSObject : AnyObject]! {
    get {
        return _logins
    }
    set {
        _logins = newValue
    }
}

override func getIdentityId() -> BFTask! {
    if self.identityId != nil {
        return BFTask(result: self.identityId)
    }
    else{
        return BFTask(result: nil).continueWithBlock({ (task) -> AnyObject! in
            if self.identityId == nil {
                return self.refresh()
            }
            return BFTask(result: self.identityId)
    })
   }
}

override func refresh() -> BFTask! {
    let task = BFTaskCompletionSource()
    let request = AFHTTPRequestOperationManager()
    request.GET(someURL, parameters: nil, success: { (request: AFHTTPRequestOperation!, response: AnyObject!) -> Void in
        var tmp = NSMutableDictionary()
        tmp.setObject("temp", forKey: "App")
        self.logins = tmp as [NSObject : AnyObject]

        let properties: NSDictionary = response.objectForKey("properties") as! NSDictionary
        let amazonId = properties.objectForKey("amazon_identity") as! String
        let amazonToken = properties.objectForKey("token") as! String

        self.identityId = amazonId
        self._token = amazonToken

        task.setResult(response)
        }, failure: {(request: AFHTTPRequestOperation!, error: NSError!) -> Void in
             task.setError(error)
    })
  return task
  }        
}

我使用以下代码作为开始,此类的实例将用于实例化 AWSCognitoCredentialsProvider,但我不确定它是如何工作的以及我应该如何使用它。具体来说,get 请求中的 URL 应该是我获得授权 token 的地方,对吧?如果有,那会在哪里?

感谢任何帮助

最佳答案

如果您想对用户进行身份验证,可以使用 Facebook、Google 等公共(public)身份提供商...或者可以使用 Amazon Cognito 用户池。您可以将您的身份提供商(Facebook、google 或 Amazon Cognito 用户池)指定为 Amazon cognito 身份池 中的身份验证提供商

举个例子,假设您要提供 Amazon cognito 用户池作为您的身份池的身份验证提供商。请参阅此链接,了解如何将 Amazon cognito 用户池与 Amazon 身份池集成

http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-integrating-user-pools-with-identity-pools.html

它在 Xcode 8swift 3 中对我有用。

谢谢。 :)

关于ios - AWS IOS SDK 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30469515/

相关文章:

iphone - 我正在比较指针和整数

swift - firebase/auth 上用户电话号码的值

java - 如何通过aws-java-sdk创建AWS默认VPC

ios - 如何打开 UIDocumentPicker 导入的文件?

ios - Xamarin Test Cloud 是否支持 iOS 设备上的 React Native 应用程序?

ios - 从字符串中删除 U\0000fffc unicode 标量

amazon-web-services - 当 jpeg 源是 mjpeg 流时,AWS Rekognition InvalidImageFormatException

R 包在 AWS t2.micro 卡住上安装 dplyr

ios - 具有相同代码库的两个项目

ios - 具有多行的 UItextField