我们使用 AWS V4 签名机制从我们的 iOS 应用程序调用我们的 API Gateway 端点。我们已经在代码中嵌入了访问密钥 ID 和密钥,运行良好。显然这不是一种安全的方式,推荐的方式是使用 AWS Cognito。我想知道我们如何使用从我的 Objective-C iOS 代码中的 AWSCredentials 对象获得的临时访问密钥和秘密(可能还有会话密钥)向我们的 API Gateway 端点发出安全请求。
我们尝试使用从 Cognito 检索到的临时访问密钥和秘密来生成 V4 签名来代替帐户访问密钥和秘密,但这似乎不是正确的方法。API Gateway 方法使用 AWS_IAM 作为授权设置启用。
这是我们得到的错误:
{ status code: 403, headers {
Connection = "keep-alive";
"Content-Length" = 69;
"Content-Type" = "application/json";
Date = "Fri, 13 Jan 2017 10:26:38 GMT";
Via = "1.1 .....cloudfront.net (CloudFront)";
"X-Amz-Cf-Id" = "...";
"X-Cache" = "Error from cloudfront";
"x-amzn-ErrorType" = UnrecognizedClientException;
"x-amzn-RequestId" = "...";
} }
使用的 IdentityPoolId 来自在 AWS Cognito 中的联合身份下创建的身份池
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"];
我们使用未经身份验证的角色,因为我们不需要任何形式的用户特定身份验证。此角色具有以下策略: AmazonAPIGatewayInvokeFullAccess AmazonAPIGatewayPushToCloudWatchLogs CloudFrontFullAccess AmazonCognitoDeveloperAuthenticatedIdentities AmazonAPIGatewayAdministrator CloudFrontReadOnlyAccess IAMReadOnlyAccess AmazonCognitoPowerUser
您能否在此处帮助我如何使用 Cognito 生成 V4 签名或完全绕过该过程。