AWS Cognito - Entwicklerauthentifizierte Identitäten in JavaScript (Browser)

Ich habe Probleme, Anmeldeinformationen in einem Browserskript abzurufen.

Der Authentifizierungsserver gibt cognito_identityId und cognito_token zurück.

Dann habe ich ein Cookie gesetzt:

$. cookie ('cognito_identityId') $. cookie ('cognito_token')

Ich habe auf vier Arten versucht, Anmeldeinformationen für den Browser abzurufen. Alle fehlgeschlagen:

CognitoIdentityCredentials

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

// => Fehler: Fehlender erforderlicher Schlüssel 'IdentityId' in params

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: Keine Berechtigung zum Ausführen von sts: AssumeRoleWithWebIdentity

Richtliniendokumen

{
"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: Bitte geben Sie einen gültigen öffentlichen Anbieter an

WebIdentityCredentials

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

// => Fehler: Es gab 2 Validierungsfehler: // * MissingRequiredParameter: Fehlender erforderlicher Schlüssel 'IdentityPoolId' in den Parametern // * MissingRequiredParameter: Fehlender erforderlicher Schlüssel 'IdentityId' in den Parametern

Fragen

Was mache ich falsch

Was ist der richtige Weg, um dies zu verwenden?

Vielen Dank

Vielen Dank für Ihre Freundlichkeit

Ich habe Ihren Rat gebunden, aber nicht geändert.

Fehlermeldungen

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

Unter dem Link befindet sich der Quellcode.

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

und die Serverseite ist eine AWS Lambda-Funktion.

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);
        }
    });
};

Dieses Programm ist Google-Chrome-Extension.

AWS Lambda-Funktion gibt Token von getOpenIdTokenForDeveloperIdentity zurück. app / scripts / popup.js ruft die Lambda-Funktion auf und setzt Cookies. app / scripts / background.js ruft AWS.config.credentials.get auf und gibt einen Fehler zurück.

Verwende ich es falsch?

Update für zusätzliche Informationen

Vielen Dank für die zusätzlichen Informationen.

Error erscheint in Zeile 104 auf background.js

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

und 115 Zeile auf background.js

      dataset.synchronize(

Und meine Erklärung war nicht genug. Die Facebook-Authentifizierung benötigt die Domain (z. B. http: // example.com). Google-Chrome-Ext hat jedoch keine Domain. Es hat eine Domain 'chrome-extension: // xxxxxxxxxxxxxxxxxxxx'. Dann benutze ichhttps: //oauth.i. Es ersetzt jede Authentifizierung und akzeptiert Chrome-Domain-Erweiterungen.

Popup.js führt die Facebook-Authentifizierung über oauth.io sdk durch. Es erhält ein Facebook-Token und gibt getOpenIdTokenForDeveloperIdentity. Ich denke, Facebook token.substr (0,14) ist einzigartig. Wenn es falsch ist, verwende ich eine andere eindeutige Kennung (z. B. E-Mail-Adresse).

Entschuldige, ich lag falsch. AWS.config.credentials.get gibt einen Fehler aus:

Error: Invalid login token.

Und dataset.synchronize zeigt diesen Fehler:

Error: Missing required key 'IdentityId' in params

Antworten auf die Frage(2)

Ihre Antwort auf die Frage