1

Я нахожусь в конце своей веревки с этой проблемой. Я пытался аутентифицировать пользователя, зарегистрированного в Facebook, из Firebase, поэтому я могу разрешить загрузку изображений в ведро S3. Я залила документацию, образцы кодов, записи в блоге и т.д. Но я получаю следующее сообщение об ошибке:AWS Cognito не аутентифицируется с использованием Federated Identity

Error: Not authorized to perform sts:AssumeRoleWithWebIdentity 

Это документация Я последовал без успеха: External Identity Providers » Facebook

Я также прочитать эту запись несколько раз Understanding Amazon Cognito Authentication и эта цитата, кажется, что происходит:

If you see this, double check that you are using an appropriate role for your identity pool and authentication type.

Я понимаю, что это говорит, но я не могу найти решение. Я не хочу хранить пользователей, я просто хочу пройти аутентификацию и получить временные учетные данные. Вот мои файлы кода, роли и политики.

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 в доверительных отношениях и у поставщиков проверки подлинности в моем пуле. У меня также есть указанная выше роль auth, выбранная в разделе «Проверенная роль» в моем пуле. Я также не допускаю неавторизованных идентификаторов.

Я честно не знаю, что происходит не так. В этот момент я бросаю спагетти на стену, чтобы посмотреть, какие палки.

Быстрый вопрос: если я не могу заставить это работать и идти с не прошедшими проверку пользователями, а затем переключиться на аутентификацию, каковы потенциальные последствия?

Спасибо за любую помощь, которую вы можете мне дать!

ответ

2

Кажется, что отношения доверия не позволяют вам называть 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" 
     }