2017-10-23 5 views
2

Hallo Kann mir jemand die Schritte zur Integration von AWS cognito für benutzerdefinierte (Benutzername/Passwort) und Google anmelden? Ich bin in der Lage, das benutzerdefinierte Login ohne Problem zu arbeiten. Ich war in der Lage, den Benutzerpool ohne Probleme zu konfigurieren. Ich wanderte nur über die Veränderungen auf der Client-Seite.Schritte zur Integration von AWS Cognito mit Google und benutzerdefinierte Anmeldung mit React

Ich benutze amazon-cognito-identity-js und aws-sdk-Pakete.

Folgendes ist ein Code-Snippet, das ich benutze. Hier verwende ich einen Parameter, um den Authentifikator zu bestimmen. Es wäre großartig, wenn jemand von Ihnen Feedback geben könnte. Vielen Dank.

export function getAwsCredentials(userToken, type) { 
 
    let authenticator = ''; 
 
    
 

 
    if (type == 'CUSTOM') { 
 
    authenticator = `cognito-idp.${config.cognito 
 
     .REGION}.amazonaws.com/${config.cognito.USER_POOL_ID}`; 
 
    } 
 
    else if (type == 'GOOGLE') { 
 
    authenticator = 'accounts.google.com'; 
 
    } 
 

 
    AWS.config.update({ region: config.cognito.REGION }); 
 

 
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
 
    IdentityPoolId: config.cognito.IDENTITY_POOL_ID, 
 
    Logins: { 
 
     [authenticator]: userToken 
 

 
    } 
 
    }); 
 

 
    return AWS.config.credentials.getPromise(); 
 
}

+0

Dieser Code sieht gut aus für mich. Fragen Sie sich, wie Sie ein 'userToken' von Google bekommen? Oder erhalten Sie ein Google-Token, das Cognito nicht mag? Ist davon auszugehen, dass Sie neben Ihrem Benutzerpool bereits einen Pool für Federated Identity eingerichtet haben? –

+0

Ja Ich habe einen Pool für Verbundidentitäten eingerichtet. Wenn das Token also kommt, kann ich es einfach als Login hinzufügen? Irgendeine Idee, wie man bestimmt, wie ein Benutzer angemeldet ist (von Google oder von Gewohnheit)? –

Antwort

1

Wenn es um Ihre Federated Identity Pool kommt, können Sie in der Tat alle Token behandeln gleichermaßen. Sie müssen nur die [authenticator] in der Logins-Karte ändern.

der Code vermutlich die Ihre getAwsCredentials Funktion aufruft, würde wissen, wo das Token herkommt, und es kann in einem Parameter übergeben, wie Sie oben tun.

Ich wollte erwähnen, dass ich nicht denke, dass dies notwendigerweise ein schrecklicher Ansatz ist. Ich könnte den Wert [authenticator] direkt übergeben, anstelle eines type, aber das ist eine relativ kleine Sache. Mein wichtigster Punkt ist, dass es in Ordnung sein kann, die Verantwortung dafür zu verlassen, zu wissen, woher das Token mit dem aufrufenden Code kam, anstatt Ihre angerufene Funktion.

Bestimmung der Identity-Provider mit Token

Es gibt natürlich gleichermaßen gültige Ansätze, die die Identity-Provider aus dem Token ziehen sich vielleicht wollen oder müssen.

Wenn Sie integrate with Google directly, erhalten Sie ein Token von Google, die Sie dann an Cognito übergeben (wie in Ihrem Code oben). Wenn Sie das Token dekodieren, finden Sie irgendwo dort irgendwo

.

Ebenso, wenn Sie sich mit Ihrem Benutzer Pool direkt integrieren, das Token, die Sie von Ihrem Benutzer Pool bekommen (die Sie später auf die Identität Pool zur Verfügung stellen) enthält so etwas wie:

"iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx", 

Auf diese Weise können Sie sagen, wie ein Benutzer sich angemeldet hat, indem er sein Token untersucht hat.

Hinweis auf Cognito Hosted UI

Wenn Sie Cognito gehosteten UI verwenden, um mit Google anmelden, erhalten Sie eine access_token und ein id_token zurück von Cognito (via Redirect) erhalten. In diesem Szenario kommen alle Tokens aus dem selben Ort (Cognito), was bedeutet, dass Sie sich nicht auf einen Anrufcode verlassen können, um zu wissen, wer der echte Identity-Provider ist.

In diesem Fall müssen Sie die Token öffnen, wenn Ihre Anwendung sich darum kümmert, wer der IDP ist.Dieser Teil der id_token ist, was Sie wahrscheinlich wollen:

"identities": [ 
    { 
     "userId": "100000000000000000000", 
     "providerName": "Google", 
     "providerType": "Google", 
     "issuer": null, 
     "primary": "true", 
     "dateCreated": "1507749926267" 
    } 
    ], 
    "token_use": "id", 
    "auth_time": 1509303233, 
    "name": "Your User", 
    "exp": 1509306833, 
    "iat": 1509303233, 
    "email": "[email protected]" 
+0

Danke Mike! Ich werde auf Ihren Punkt achten. Ich verwende nicht die von Cognito gehostete Benutzeroberfläche –

Verwandte Themen