1
내 모바일 앱에 AWS Cognito (User Pools) 및 AWS DynamoDB를 사용하려고합니다.신속한 인증 된 사용자 (사용자 풀)로 DynamoDB에 액세스하는 방법
- 는 AWS Cognito에 사용자 풀을 만듭니다 나는 다음과 같은했다.
- AWS Cognito에서 ID 풀을 만들고 인증 공급자에서 사용자 풀 ID, 앱 클라이언트 ID를 Cognito로 설정합니다.
- AWS DynamoDB에서 SampleTable을 만듭니다.
- AWS IAM의 SampleTable에 액세스 할 수있는 권한 설정 인증 된 역할을 설정합니다.
는이 코드 생성 :
let userPoolConfigration = AWSServiceConfiguration.init(region: AWSRegionType.USEast1, credentialsProvider: nil)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = userPoolConfigration
let userServiceConfigration = AWSCognitoIdentityUserPoolConfiguration.init(clientId: "(client id from user pool)", clientSecret: "(client secret from user pool)", poolId: "(user pool id from user pool)")
AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithUserPoolConfiguration(userServiceConfigration, forKey: "AmazonCognitoIdentityProvider")
let pool = AWSCognitoIdentityUserPool(forKey: "AmazonCognitoIdentityProvider")
let user = pool.getUser("sampleuser")
user.getSession("sampleuser", password: "samplepassword", validationData: nil, scopes: nil).continueWithBlock({ task in
if (task.error == nil) {
let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.USEast1,
identityPoolId:"(identity id from identity pool)")
let ret = task.result as! AWSCognitoIdentityUserSession
let logins: NSDictionary = NSDictionary(dictionary: ["cognito-idp.us-east-1.amazonaws.com/(user pool id from user pool)" : ret.idToken!.tokenString])
credentialsProvider.logins = logins as [NSObject : AnyObject]
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
credentialsProvider.clearKeychain()
credentialsProvider.credentials().continueWithBlock {(task: AWSTask!) -> AnyObject! in
let result = task.result as! AWSCredentials
let newcredentialsProvider = AWSStaticCredentialsProvider(accessKey:result.accessKey, secretKey: result.secretKey)
let newdefaultServiceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: newcredentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = newdefaultServiceConfiguration
let dynamoDBObjectMapper = AWSDynamoDBObjectMapper.defaultDynamoDBObjectMapper()
let scanExpression = AWSDynamoDBScanExpression()
dynamoDBObjectMapper.scan(SampleTable.self, expression: scanExpression).continueWithBlock({ task in
print(task.result)
return nil
})
return nil
}
}
return nil
})
을하지만 "dynamoDBObjectMapper.scan는()"를 실행했을 때이 오류가 발생했습니다 :
2016-06-23 16:57:04.988 AWSiOSSDK v2.4.3 [Debug] AWSURLSessionManager.m line:525 | -[AWSURLSessionManager printHTTPHeadersAndBodyForRequest:] | Request headers:
{
"Content-Type" = "application/x-amz-json-1.0";
Host = "dynamodb.us-east-1.amazonaws.com";
"User-Agent" = "aws-sdk-iOS/2.4.3 iPhone-OS/9.2 en_US mapper";
"X-Amz-Date" = 20160623T075704Z;
"X-Amz-Target" = "DynamoDB_20120810.Scan";
}
2016-06-23 16:57:04.988 if-she[3704:367618] AWSiOSSDK v2.4.3 [Debug] AWSURLSessionManager.m line:542 | -[AWSURLSessionManager printHTTPHeadersAndBodyForRequest:] | Request body:
{"TableName":"SampleTable"}
2016-06-23 16:57:05.844 AWSiOSSDK v2.4.3 [Debug] AWSURLSessionManager.m line:552 | -[AWSURLSessionManager printHTTPHeadersForResponse:] | Response headers:
{
Connection = "keep-alive";
"Content-Length" = 125;
"Content-Type" = "application/x-amz-json-1.0";
Date = "Thu, 23 Jun 2016 07:57:05 GMT";
Server = Server;
"x-amz-crc32" = 2088342776;
"x-amzn-RequestId" = FPM78JRBQIKG2DOLI62SL4IRMFVV4KQNSO5AEMVJF66Q9ASUAAJG;
}
2016-06-23 16:57:05.845 AWSiOSSDK v2.4.3 [Debug] AWSURLResponseSerialization.m line:63 | -[AWSJSONResponseSerializer responseObjectForResponse:originalRequest:currentRequest:data:error:] | Response body:
{"__type":"com.amazon.coral.service#MissingAuthenticationTokenException","message":"Request is missing Authentication Token"}
어쩌면 내가 인증 토큰을 사용하는 방법을 실종 . 내 코드에 어떤 문제가 있습니까?
감사합니다.
답장을 보내 주셔서 감사합니다. AWSStaticCredentialsProvider의 initialize 메소드에는 sessionKey 매개 변수가 없습니다. 그래서 "initialize AWSStaticCredentialsProvider"및 "regist defaultServiceConfiguration it"코드를 삭제합니다. 하지만 같은 오류가있었습니다. – hiro