【问题标题】:AWS IOS SDK AuthenticationAWS IOS 开发工具包身份验证
【发布时间】:2015-08-08 18:35:34
【问题描述】:

我是 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。但它是通过我已授予“s3:*”权限的 unauth 角色这样做的。我想将这些操作限制为经过身份验证的角色。在 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,但我不确定它是如何工作的以及我应该如何使用它。具体来说,获取请求中的 URL 应该是我获得授权令牌的位置吗?如果有,那会在哪里?

感谢任何帮助

【问题讨论】:

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


    【解决方案1】:

    如果您想对您的用户进行身份验证,您可以使用 Facebook、google 等公共身份提供商...或者您可以使用 Amazon Cognito 用户池。您可以在 Amazon cognito 身份池 中将您的身份提供商(Facebook、google、.. 或 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 为我工作。

    谢谢。 :)

    【讨论】:

      【解决方案2】:

      开发人员身份验证功能要求您拥有能够验证用户凭据(用户名和密码)的后端。您可以将您的用户注册到此后端,然后使用它来验证他们,然后出售您将从 Cognito 获得的令牌。移动应用程序将通过 URL 与此后端服务器通信。请参考我们的blog post,它有一个设置后端的端到端示例和一个与后端交互的 Objective-C 示例。目前我们在 Swift 中没有任何示例,但我们会将其作为功能请求。

      谢谢,
      拉希特

      【讨论】:

      • 后端现在可以换成lamdba了吗?
      • 是的,您可以使用 Lambda。
      猜你喜欢
      • 2016-12-04
      • 2017-05-14
      • 2019-02-20
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      相关资源
      最近更新 更多