使用Google身份验证令牌导致"令牌受众群体不正确"的原因

Jer*_*orn 7 authentication amazon-web-services google-openid oauth-2.0 google-plus

我正在创建一个简单的Web应用程序,它将使用Google身份验证返回OpenID令牌,然后使用javascript WebIdentityCredentials将该令牌传递给AWS.

我做了什么:

  1. 创建了Google项目,并保存了OAuth ClientID
  2. 使用Google IDP创建IAM角色,并将OAuth ClientID创建为Audience字段.
  3. 在上面配置的网页中包含Google API和AWS API javascript.
  4. (客户端)使用google js api从Google请求id令牌
  5. 在WebIdentityCredentials上配置id令牌
  6. 检索AWS凭据(使用该令牌)

检索凭据时,我从STS收到此错误:

<ErrorResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
  <Error>
    <Type>Sender</Type>
    <Code>InvalidIdentityToken</Code>
    <Message>Incorrect token audience</Message>
  </Error>
  <RequestId>28d09368-bf98-11e5-b52f-953b4c773ebf</RequestId>
</ErrorResponse>
Run Code Online (Sandbox Code Playgroud)

以下是AWS角色:

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Principal": {"Federated": "accounts.google.com"},
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "accounts.google.com:aud": "<my-oauth-client-id>"
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

以下是我用于在AWS上下文中配置令牌的代码:

AWS.config.update({
   region: 'us-east-1',
   credentials: new AWS.WebIdentityCredentials({
     RoleArn: 'arn:aws:iam::<my-acct>:role/lab-amp-google-idp',
     WebIdentityToken : token
   })
});
Run Code Online (Sandbox Code Playgroud)

这里是我通过获取凭据测试凭据的地方:

AWS.config.credentials.get(function(err) {
   if (err) console.log(err);
   else console.log(AWS.config.credentials);
});
Run Code Online (Sandbox Code Playgroud)

我已经使用jwt.io验证了id令牌,我可以看到它具有正确的预期字段."aud"和"azp"属性具有OAuth客户端ID.我还仔细检查了AWS角色中的Trust stansza,以确认它在条件中也具有完全相同的OAuth客户端ID.

我已经传入了其他无效的令牌并改变了RoleArn只是为了看到不同的错误,我这样做.

我在网上找不到任何描述"不正确的令牌受众"原因的内容,所以我不知道接下来要尝试什么.