AWS Cognito - идентифицированные разработчиком удостоверения в JavaScript (браузер)

У меня проблемы с получением учетных данных в скрипте браузера.

Сервер аутентификации возвращает cognito_identityId и cognito_token.

Затем я установил Cookie:

$ .Cookie ( 'cognito_identityId')$ .Cookie ( 'cognito_token')

Я пытался получить учетные данные в браузере четырьмя способами, и все не удалось:

CognitoIdentityCredentials

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:xxxxxxxxxxxx'
    IdentityId: $.cookie('cognito_identityId'),
    Logins: {
        'myauth': $.cookie('cognito_token')
    }
});

// => Ошибка: отсутствует обязательный ключ 'IdentityId' в параметрах

assumeRoleWithWebIdentity

var params = {
  RoleArn: 'arn:aws:iam::xxxxxxxxxxxx:role/Cognito_xxxxxxxAuth_Role',
  RoleSessionName: 'xxxxxxxxxxx',
  WebIdentityToken: $.cookie('cognito_token'),
  DurationSeconds: 900,
  ProviderId: 'myauth'
};
var sts = new AWS.STS({apiVersion: '2011-06-15'});
sts.assumeRoleWithWebIdentity(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

// => AccessDenied: не авторизован для выполнения sts: AssumeRoleWithWebIdentity

PolicyDocument

{
"Version": "2012-10-17",
"Statement": [
  {
    "Sid": "",
    "Effect": "Allow",
    "Principal": {
      "Federated": "cognito-identity.amazonaws.com"
    },
    "Action": "sts:AssumeRoleWithWebIdentity",
    "Condition": {
      "StringEquals": {
        "cognito-identity.amazonaws.com:aud": "us-east-1:xxxxxxxxxxxxx"
      },
      "ForAnyValue:StringLike": {
        "cognito-identity.amazonaws.com:amr": "authenticated"
      }
    }
  }
]
}

GetCredentialsForIdentity

var params = {
    IdentityId: $.cookie('cognito_identityId'),
    Logins: {
      "myauth": $.cookie('oauth.io_token')
    }
};
var cognitoidentity = new AWS.CognitoIdentity({apiVersion: '2014-06-30'});
cognitoidentity.getCredentialsForIdentity(params, function(err, data) {
  if (err) {
    console.log(err, err.stack); // an error occurred
  }
  else {
    console.log(data);           // successful response
  }
});

// => InvalidParameterException: укажите действующего общедоступного поставщика

WebIdentityCredentials

AWS.config.credentials = new AWS.WebIdentityCredentials({
    RoleArn: 'arn:aws:iam::xxxxxxxx:role/Cognito_xxxxxxxxxxAuth_Role',
    WebIdentityToken: $.cookie('cognito_token')
});

// => Ошибка: было 2 ошибки проверки: // * MissingRequiredParameter: отсутствует обязательный ключ 'IdentityPoolId' в параметрах // * MissingRequiredParameter: отсутствует обязательный ключ 'IdentityId' в параметрах

Вопросы:

Что я делаю неправильно?

Как правильно это использовать?

Спасибо.

Спасибо за вашу доброту.

Я связал ваш совет, но не изменился.

Сообщения об ошибках.

POST https://cognito-identity.us-east-1.amazonaws.com/ 400 (Bad Request)
POST https://cognito-identity.us-east-1.amazonaws.com/ 400 (Bad Request)
Error: Missing required key 'IdentityId' in params
    at fail (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:2163:37)
    at validateStructure (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:2084:14)
    at validateMember (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:2110:21)
    at validate (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:2059:10)
    at Request.VALIDATE_PARAMETERS (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:800:32)
    at Request.callListeners (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:3913:20)
    at callNextListener (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:3903:12)
    at chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:787:9
    at finish (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:126:7)
    at chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:142:9

Ниже приведен исходный код ссылки.

https://github.com/bisque33/my-custom-dictionary

а серверная часть - это лямбда-функция AWS.

var aws = require('aws-sdk');
aws.config.region = 'us-east-1';
var cognitoidentity = new aws.CognitoIdentity();
var identityPoolId = 'us-east-1:0dccff0d-5fd7-4d14-b38f-d27204feaecc';

console.log('Loading function');

exports.handler = function(event, context) {
    console.log('token: %s', event.token);

    var params = {
        IdentityPoolId: identityPoolId,
        Logins: {
            'oauth.io': event.token
        }
    };
    cognitoidentity.getOpenIdTokenForDeveloperIdentity(params,function(err,data){
        if(err){
            console.log(err);
            context.fail('Something went wrong');
        }else{
            context.succeed(data);
        }
    });
};

Эта программа является Google-Chrome-Extension.

Лямбда-функция AWS возвращает токен с помощью getOpenIdTokenForDeveloperIdentity.app / scripts / popup.js вызывает лямбда-функцию и устанавливает куки.app / scripts / background.js вызывает AWS.config.credentials.get и возвращает ошибку.

Я использую это неправильно?

Обновление для дополнительной информации

Спасибо за дополнительную информацию.

Ошибка появляется в 104 строке на background.js

AWS.config.credentials.get(function(){

и 115 строчка на background.js

      dataset.synchronize(

И Моего объяснения было недостаточно. Для аутентификации Facebook необходим домен (например, http: // example.com). Однако у Google-Chrome-Ext нет домена. У него есть домен 'chrome-extension: // xxxxxxxxxxxxxxxxxxxx'. Затем я используюhttps://oauth.io, Он использует любую аутентификацию и принимает домен с расширением Chrome.

Popup.js выполняет проверку подлинности Facebook через oauth.io SDK. Он получает токен Facebook и передает getOpenIdTokenForDeveloperIdentity. Я думаю, что Facebook Token.substr (0,14) является уникальным. Но, если это не так, я использую другой уникальный идентификатор (например, адрес электронной почты).

Извините, я был не прав. AWS.config.credentials.get выдает ошибку:

Error: Invalid login token.

И, dataset.synchronize показывает эту ошибку:

Error: Missing required key 'IdentityId' in params

Ответы на вопрос(1)

Ваш ответ на вопрос