首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过身份认证的认知用户(用户池)访问DynamoDB

如何通过身份认证的认知用户(用户池)访问DynamoDB
EN

Stack Overflow用户
提问于 2016-06-23 08:25:07
回答 1查看 2K关注 0票数 2

我正试图在我的移动应用程序中使用AWS认知(用户池)和AWS DynamoDB。

我做了以下工作:

  1. 在AWS认知上创建用户池。
  2. 在AWS认知系统上创建身份池,并将用户池Id、应用程序客户端Id设置为身份验证提供程序。
  3. 在AWS SampleTable上创建DynamoDB。
  4. 将权限验证角色设置为访问AWS上的SampleTable。

我创建了以下代码:

代码语言:javascript
复制
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()“时,我得到了这个错误:

代码语言:javascript
复制
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"}

也许我错过了如何使用身份验证令牌。我的密码怎么了?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-06-23 18:44:09

您能尝试将会话令牌添加到newcredentialsProvider吗?您将在结果中包括访问密钥和秘密密钥。

此外,一旦将认知凭证提供程序添加为defaultServiceConfiguration,就不需要明确地获取凭据。您可以直接创建dynamoDBObjectMapper实例,在调用Dynamo或任何其他AWS服务时,SDK将自动从科尼图提取临时凭据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37986034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档