2015-05-26 140 views
0

我是新來的ios開發人員,我試圖將AWS集成到Swift編寫的移動應用程序中。我用下面的代碼的文件連接並上傳到S3:AWS IOS SDK身份驗證

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:*」權限的未知角色這樣做的。我想將這些操作限制爲已認證的角色。在AWS的文檔中,解決方案涉及使用Facebook,Twitter,亞馬遜,谷歌等,或者使開發人員通過身份驗證。

由於所有文檔都在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應該是我獲得授權令牌的權利?如果是這樣,那會是什麼?

任何幫助表示讚賞

回答

0

開發人員的身份驗證功能需要你有不得不驗證用戶的憑據(用戶名和密碼)的能力的後端。你會註冊你的用戶到這個後端,然後用它來驗證它們,然後出售你將從Cognito獲得的令牌。移動應用程序將通過URL與此後端服務器進行通信。請參考我們的blog post,它有一個端到端的例子來設置一個後端和一個與後端交互的Objective-C樣例。目前,我們在Swift中沒有任何樣本,但我們會將其作爲功能請求。

感謝,
Rachit

+0

現在可以將後端替換爲lamdba嗎? – cdub

+1

是的,你可以使用Lambda。 –

1

如果你想你的用戶進行身份驗證您就可以使用Facebook,谷歌等公共身份提供者去...或者你可以用亞馬遜Cognito用戶池去。您可以指定您的身份提供商(Facebook,谷歌,..或亞馬遜Cognito用戶池)身份驗證提供商亞馬遜認知身份池

說例如,假設你要給亞馬遜cognito用戶池身份驗證提供爲您的身份池。請參閱此鏈接以探索如何將亞馬遜認知用戶池與Amazon身份池進行整合。

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

其在Xcode 8工作對我來說,swift 3

謝謝。 :)