2013-01-15 109 views
0

我測試了備份核心數據到DynamoDB,我已經在我的應用程序委託實現AWSPersistenceDynamoDBIncrementalStoreDelegate,與相關credentials方法,這樣實施:爲什麼我的AmazonCredentials對象無效?

- (AmazonCredentials *)credentials 
{ 
    if(credentials==nil) { 
     credentials = [[AmazonCredentials alloc] initWithAccessKey:@"ACCESS_KEY" withSecretKey:@"SECRET_KEY"]; 
    } 
    return credentials; 
} 

顯然代我真正的安全憑據合適的(這ISN」 t如何實施生產,但我不想爲我正在做的原型設置TVM)。

然而,當我試圖創建一個Entity這樣:

Track *track = (Track*)[NSEntityDescription insertNewObjectForEntityForName:@"Track" inManagedObjectContext:appDelegate.managedObjectContext]; 

我收到以下錯誤:

error: Error Domain=com.amazonaws.coredata.AWSPersistenceDynamoDBClientErrorDomain Code=-1 "The operation couldn’t be completed. (com.amazonaws.coredata.AWSPersistenceDynamoDBClientErrorDomain error -1.)" UserInfo=0xa5363d0 {message=The protocol - (AmazonCredentials *)credentials didn't return a valid AmazonCredentials object.} 

我可以看到AmazonCredentials對象實例化,並具有正確的細節我可以使用相同的憑據來建立會話並從存儲桶下載文件,因此它們絕對有效。

有沒有人看過這個/知道問題是什麼?

回答

1

好吧,看看Github上的代碼https://github.com/aws/aws-sdk-ios/blob/master/src-persistence/AWSPersistenceDynamoDBIncrementalStore.m它表明您必須使用三個arg構造函數(包括安全性令牌來使用DynamoDB來備份Core Data),如果在文檔中提到該方法會很有用,但無論如何,總之你必須實施一個TVM才能做到這一點。

+0

已經觀察到建立一個TVM我意識到(鮑勃也指出)是STS已提供給了iOS SDK去年然而,幾乎所有的AWS文檔仍然是指使用TVM ,因此我添加了一個關於如何獲得這個工作的快速書寫http://codeghost.co.uk/blog/2013/1/15/authenticating-against-aws-with-sts – codeghost

1

儘管目前DynamoDB客戶端需要會話證書,但可以由安全令牌服務(STS)客戶端提供,並且不需要實施TVM。

STS Client for iOS

+0

感謝鮑勃,是的,我意識到當我開始研究TVM時,它在AWS上的記錄非常糟糕,我看到的所有文檔仍然指向TVM,所以我實際上寫了如何讓STS工作。如果您有興趣,我會在鏈接中添加評論。 – codeghost

相關問題