0

AWS Wizards,Google+ Auth in AWS Cognito und API-Gateway ist nicht autorisiert

ich ein POC Web-App erstellt habe AWS Cognito und Federated Identities für ein Projekt zu testen.

Ich erweiterte die POC mit Google+ authentication. Wenn sich ein Nutzer über Google authentifiziert, steigt der Counter für Google Signin in "Federated Identities". Diese werden natürlich überprüft.

Jetzt versuche ich die Anmeldeinformationen mit einem gesicherten AWS API Gateway Endpunkt ohne Glück zu verwenden. Der Benutzer bleibt gemäß dem Gateway unautorisiert. Ich habe versucht, die Test-Funktion in der API Gateway Authorizers-Konfiguration, wenn ich mit einem Cognito-Benutzer testen CognitoUserSession.idToken der Test gibt die Ansprüche zurück.

Wenn ich denselben Test mit einem Google-Benutzer idToken mache, ist es nicht authentifiziert. Nach einer erfolgreichen Google-Anmeldung wird im selben AWS JavaScript SDK-Code ausgeführt (als Cognito-Benutzeranmeldung). Die Berechtigungsnachweise werden mit einer Identitäts-ID und einem Sitzungstoken, aber ohne ID-Token aktualisiert.

Da ich insgesamt auf AWS noob bin, vermisse ich hier wohl etwas. Was muss ich tun, um einen gültigen idToken zu erhalten? Sollte es anders gemacht werden?

(GoogleLogin ist ein Reagieren Komponente)

render() { 
    return (
     <GoogleLogin 
      clientId="44xxx11.apps.googleusercontent.com" 
      buttonText="Google Login" 
      onSuccess={this.responseGoogle} 
      onFailure={this.responseGoogle} 
     /> 
    ) 
} 

responseGoogle(response) { 
    console.log(response.tokenId) 
    cognitoIdentityCredentials(response.tokenId) 
} 

cognitoIdentityCredentials(idToken) { 

    const loginsObj = { 
     ['accounts.google.com']: idToken 
    } 

    AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
     IdentityPoolId: IDENTITY_POOL_ID, // your identity pool id here 
     Logins: loginsObj 
    }) 

    AWS.config.credentials.get(function(err) { 
     if (err) { 
      console.log(err); 
     } else { 
      console.log("---- AWS credentials ----") 
      console.log(AWS.config.credentials) 
      // Got credentials, but no valid idToken 
     } 
    }) 
} 
+0

dieser Code scheint in Ordnung, aber es gibt keinen Code, der Lambda aufruft ... und das Problem scheint dort zu sein ... – UXDart

+0

Warum sollte ich ein Lambda auf der Clientseite aufrufen? – Sven

+0

"Jetzt versuche ich, die Anmeldeinformationen mit einem sicheren AWS API Gateway-Endpunkt ohne Glück zu verwenden" ... – UXDart

Antwort

0

Die Lösung für dieses Problem ist, dass Sie nicht wirklich AWS Security die Art und Weise verwenden können, nahm ich an. In AWS API Gateway kann eine generierte Bibliothek heruntergeladen werden, um speziell auf diese API zuzugreifen. Bei der Verwendung der lib haben wir festgestellt, dass der Anfrage mehr Felder hinzugefügt wurden und dass sie signiert sind. Alle von ihnen.

Es wird schwierig sein, verschiedene SDK-Bibliotheken für verschiedene Umgebungen und Anwendungen zu verwenden. Daher haben wir einfach eines der SDKs zu einer allgemeinen Bibliothek zusammengestellt, die wir für alle Anfragen in allen Webprojekten verwenden können. Es gibt ähnliche Projekte bereits auf Github, aber sie arbeiten leider nur mit Cognito-Benutzern, nicht mit Federated Identities.

Glücklicher Panda wieder.