2016-06-14 14 views
2

Ich habe ähnliche Probleme untersucht, konnte aber mein Problem nicht lösen. Ich entwickle eine Webanwendung, bei der sich der Benutzer mithilfe der Authentifizierung von AWS Cognito authentifizieren wird. Der Anmeldevorgang ist in Ordnung, aber wenn ich versuche, mich anzumelden, erhalte ich die Ausnahme "nicht autorisiert". Ich habe bereits versucht, benutzerdefinierte Richtlinien meiner IAM Rolle zu befestigen (sts Ermächtigung: AssumeRoleWithWebIdentity), aber hat nicht funktioniert .. Hier ist, wie der Code jetzt geschrieben:AccessDenied: Nicht autorisiert, M zu erfüllen: AssumeRoleWithIdentity

 var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData); 
cognitoUser.authenticateUser(authenticationDetails, { 
    onSuccess: function (result) { 
     var sts = new AWS.STS({apiVersion: '2011-06-15'}); 

     var params = { 
      RoleArn: 'arn:aws:iam::981601120657:role/Cognito_AliceAuth_Role', /* required */ 
      RoleSessionName: 'AliceUserSession', 
      WebIdentityToken: result.getIdToken().getJwtToken(), 
      Policy: '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRoleWithWebIdentity", "Resource": "*" } ] }' 
     }; 

     sts.assumeRoleWithWebIdentity(params, function (err, data) { 
      if (err) 
       console.log(err, err.stack); // ** <-- ERROR HERE 
      else 
       console.log(data);   // successful response 
     }); 

     //document.getElementById('authForm').submit(); 
    }, 
    onFailure: function (err) { 
     alert(err); 
    } 

}); 

Wie Sie sehen können, habe ich Ich habe die Richtlinie auch im Code angegeben, aber ich erhalte immer noch den Fehler "AccessDenied: Nicht berechtigt, sts: AssumeRoleWithIdentity durchzuführen". Bitte helfen Sie mir:/

EDIT:

Im Inneren des "Cognito_AliceAuth_Role" Ich habe die Rolle Politik erstellt haben: AssumeRoleWithWebIdentityPolicy:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": "sts:AssumeRoleWithWebIdentity", 
      "Resource": "*" 
     } 
    ] 
} 

und: GetFederationTokenPolicy

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": "sts:GetFederationToken", 
      "Resource": "*" 
     } 
    ] 
} 

Das Vertrauen Beziehung:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "Federated": "cognito-identity.amazonaws.com" 
     }, 
     "Action": "sts:AssumeRoleWithWebIdentity", 
     "Condition": { 
     "StringEquals": { 
      "cognito-identity.amazonaws.com:aud": "us-east-1:e4c1833d-a62b-402a-b995-1b2513b04c02" 
     }, 
     "ForAnyValue:StringLike": { 
      "cognito-identity.amazonaws.com:amr": "authenticated" 
     } 
     } 
    } 
    ] 
} 
+0

Wie hat das Anfügen der Richtlinie, damit Ihr IAM-Benutzer sts verwenden kann: AssumeRoleWithIdentity funktioniert nicht? –

+0

Ich weiß es wirklich nicht ... :(Ich habe die Frage aktualisiert und weitere Informationen hinzugefügt. –

+0

Wenn Sie versuchen, sich mit temporären Zugangsdaten zu authentifizieren, welche Informationen bieten Sie an? –

Antwort

0

Scheint so, als ob Sie das von Cognito-Benutzerpools verkaufte Id-Token verwenden, um die Funktion assumeRoleWithIdentity aufzurufen.

Sie müssen dieses Token zuerst mit der Cognito-Identität verknüpfen und das Verbindungs-Token Open Id, das von Cognito identity ausgegeben wird, verwenden, um den Befehl assumeRoleWithIdentity aufzurufen. Sie können getCredentialsForIdentity auch direkt mit Enhanced flow aufrufen.

Weitere Informationen zum Verknüpfen von Benutzerpool-Token mit Cognito-Identität finden Sie unter this.

Verwandte Themen