API网关如何从其他客户端传递AWS IAM授权

时间:2015-09-28 23:27:48

标签: amazon-iam aws-api-gateway

我正在尝试从其他客户端测试经过身份验证的API网关端点。如何在发出请求时生成/设置“AWS_IAM”授权标头?

2 个答案:

答案 0 :(得分:5)

您可以将Cognito与" public"池ID,然后将角色附加到Cognito池ID,该角色正在访问您的API GATEWAY

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'REGION:YOUR_POOL_ID',
});

使用AWS STS获取具有有限权限的临时凭证。之后,您可以将API网关与AWS_IAM身份验证一起使用

生成的SDK接受AMI凭据,您必须使用从STS获得的客户端启动客户端:

var apigClient = apigClientFactory.newClient({
    accessKey: 'ACCESS_KEY',
    secretKey: 'SECRET_KEY',
    sessionToken: 'SESSION_TOKEN', //OPTIONAL: If you are using temporary credentials you must include the session token
    region: 'eu-west-1' // OPTIONAL: The region where the API is deployed, by default this parameter is set to us-east-1
});

注意:严格按照游戏池中的最小角色,即公开ID,每个机构都可以使用它来获取临时或固定(用于跨设备跟踪用户)user_ / app_ id。

2016年4月更新: 对于Christine评论:Documentation关于如何使用STS。

TL; DR:基本上在您的身份提供商回电后(Google,在我的情况下),您将拥有一个令牌(在我的情况下为OpenID),只需将其提供给STS:

AWS.config.credentials = new AWS.WebIdentityCredentials({
  RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>',
  ProviderId: 'graph.facebook.com|www.amazon.com', // Omit this for Google
  WebIdentityToken: ACCESS_TOKEN
});

答案 1 :(得分:1)

您必须复制API Gateway AWS v4 request signature逻辑才能执行此操作。理想情况下,您应该查看为您的API生成的Javascript / Java SDK,以了解如何计算这些请求签名。我建议您关闭测试请求的身份验证。