【问题标题】:AWS Cognito does not authenticate using Federated IdentityAWS Cognito 不使用联合身份进行身份验证
【发布时间】:2023-04-03 08:43:02
【问题描述】:

我在这个问题上走到了尽头。我一直在尝试对来自 Firebase 的 Facebook 登录用户进行身份验证,以便允许将图像上传到 S3 存储桶。我翻阅了文档、示例代码、博客条目等。但我不断收到以下错误:

Error: Not authorized to perform sts:AssumeRoleWithWebIdentity

这是我没有成功的文档: External Identity Providers » Facebook

我也多次阅读此博客条目Understanding Amazon Cognito Authentication,这句话似乎是正在发生的事情:

如果您看到这一点,请仔细检查您是否为您的身份池和身份验证类型使用了适当的角色。

我明白它在说什么,但我找不到解决方案。我不想存储用户,我只想进行身份验证并获取临时凭据。这是我的代码、角色和策略文件。

JavaScript

AWS.config.update({
  region: bucketRegion,
  credentials: new AWS.CognitoIdentityCredentials({
  IdentityPoolId: IdentityPoolId,
  Logins: {
      'graph.facebook.com': 'my-valid-auth-token-from-fb-after-login'
    }
  })
});

AWS.config.credentials.get(function(err) {
    // error here
}

经过身份验证的 IAM 角色策略 - 内联

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Sid": "myuserBucketActions",
        "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucketMultipartUploads"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucket-name"
    },
    {
        "Sid": "myuserListBucket",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucket-name",
        "Condition": {
            "StringLike": {
                "s3:prefix": "folder-in-bucket/*"
            }
        }
    },
    {
        "Sid": "myuserObjectActions",
        "Action": [
            "s3:AbortMultipartUpload",
            "s3:GetObject",
            "s3:PutObject"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::bucket-name/folder-in-bucket/*"
    }
  ]
}

IAM 角色策略的信任关系

{
  "Version": "2012-10-17",
  "Statement": [
{
  "Sid": "",
  "Effect": "Allow",
  "Principal": {
    "Federated": "graph.facebook.com"
  },
  "Action": "sts:AssumeRoleWithWebIdentity",
  "Condition": {
    "StringEquals": {
      "graph.facebook.com:appId": "FACEBOOK_APP_ID"
    }
   }
  }
 ]
}

我在信任关系和池中的身份验证提供程序中拥有正确的 FB 应用程序 ID。我还在我的池中的已验证角色下选择了上述身份验证角色。我也不允许未经身份验证的身份。

老实说,我不知道出了什么问题。此时我正往墙上扔意大利面,看看有什么粘着。

小问题:如果我不能让它工作并与未经身份验证的用户一起使用,那么切换到经过身份验证的用户,潜在的后果是什么?

感谢您能给我的任何帮助!

【问题讨论】:

    标签: amazon-web-services authentication amazon-s3 aws-sdk amazon-cognito


    【解决方案1】:

    似乎信任关系不允许您调用 sts:AssumeRoleWithWebIdentity。

    可以换吗

    "Condition": {
        "StringEquals": {
          "graph.facebook.com:appId": "FACEBOOK_APP_ID"
        }
       }
      }
    

    通过这个

    "ForAnyValue:StringLike": {
      "cognito-identity.amazonaws.com:amr": "graph.facebook.com"
    }
    

    也替换

     "Principal": {
        "Federated": "graph.facebook.com"
      }
    

    "Principal": {
            "Federated": "cognito-identity.amazonaws.com"
          }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-05
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      相关资源
      最近更新 更多