0

Ich habe einen API-Gateway-Endpunkt mit einer Lambda-Funktion im Backend erstellt. Dann habe ich einen cognito userpool mit einem Account erstellt und den cognito userpool als Authorizer in API Gateway konfiguriert. Ich konnte sehen, dass die API nicht autorisiert war.Wie wird das AWS Cognito Userpool-Token für die Anmeldung beim AWS API-Gateway verwendet?

Dann habe ich eine kleine Webseite mit AWS Cognito Javascript SDK erstellt, um sich im Userpool anzumelden und ein Zugriffs-Token zu erhalten. Ich konnte das erfolgreich machen. Hier ist der Code.

var authenticationData = { 
 
     Username : 'username', 
 
     Password : 'test123', 
 
    }; 
 
    var authenticationDetails = new AuthenticationDetails(authenticationData); 
 
    var poolData = { 
 
     UserPoolId : 'ap-southeast-2_12312', // Your user pool id here 
 
     ClientId : '434324324' // Your client id here 
 
    }; 
 
    var userPool = new CognitoUserPool(poolData); 
 
    var userData = { 
 
     Username : 'username', 
 
     Pool : userPool 
 
    }; 
 

 
    var self = this; 
 
    var cognitoUser = new CognitoUser(userData); 
 
    cognitoUser.authenticateUser(authenticationDetails, { 
 
     onSuccess: function (result) { 
 
      var tok = result.getAccessToken().getJwtToken(); 
 
      console.log('access token + ' + tok); 
 
      self.setState({ token: tok }); 
 
      //POTENTIAL: Region needs to be set if not already set previously elsewhere. 
 
      // AWS.config.region = '<region>'; 
 

 
      // AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
 
      //  IdentityPoolId : '...', // your identity pool id here 
 
      //  Logins : { 
 
      //   // Change the key below according to the specific region your user pool is in. 
 
      //   'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>' : tok 
 
      //  } 
 
      // }); 
 

 
      // Instantiate aws sdk service objects now that the credentials have been updated. 
 
      // example: var s3 = new AWS.S3(); 
 
     }, 
 

 
     onFailure: function(err) { 
 
      alert(err); 
 
     }, 
 
    });

Dieser Code funktioniert und gibt mir ein JWT Token. Dieses Token autorisiert mich jedoch nicht zur API. Ich gebe das Token im Autorisierungsheader ohne das Bearer-Schlüsselwort weiter, aber ich kann immer noch nicht auf die API zugreifen. Wie kann ich das machen?

Antwort

1

Möglicherweise können Sie das Debuggen mithilfe der Funktion "Test" für Autorisierer in der API Gateway-Konsole einfacher durchführen. Sie können das gültige JWT-Token dort einfügen und einen Test für den Autorizer ausführen; Wenn Probleme auftreten, sollten Sie sie in der Ausgabe von Logs sehen.

+0

Es gibt auch eine Testseite für Authorizer. Mein JWT-Token funktioniert auch nicht dort. – Hash

+0

Der Test in der API-Konsole funktioniert mit und ohne JWT-Token. – Hash

+0

Ja, ich spreche über die Testseite für Authorizer. Wenn das Token dort nicht funktioniert, sollten Sie in der Lage sein, das Problem mithilfe der Logs-Ausgabe zu beheben. Die Token laufen ab, also stellen Sie sicher, dass Sie mit einem neuen Token testen. Das Token muss von einem Benutzerpool ausgegeben werden, der mit einem 'providerARN' übereinstimmt, den Sie für den Autorizer festgelegt haben. –