2016-04-04 14 views
3

Ich erstelle einen Back-End-Dienst, und ich verwende AWS Cognito. Momentan verwende ich meine authentifizierten Entwickleridentitäten. So kann sich mein Benutzer mit meinem eigenen System anmelden. Dieser Teil ist fertig.Überprüfen Sie die Benutzeridentität mithilfe von cognito

Allerdings habe ich Probleme, den Benutzer nach der Anmeldung zu authentifizieren. Angenommen, der Benutzer sendet mir eine Anfrage, um auf eine private Funktion meiner API zuzugreifen. Wie kann ich diesen Benutzer identifizieren und authentifizieren?

Wenn ich facebook als Login-Provider verwende, kann ich den http-Header mit seiner Cognito ID und seinem Facebook Access Token erfüllen. Dann kann ich ihn authentifizieren und versuchen, ein Cognito Token mit der Funktion GetOpenIdTokenRequest zu erhalten.

werde ich so etwas wie

providerTokens.put("graph.facebook.com", "xxxxxxxxxxxx"); 
tokenRequest.setLogins(providerTokens); 

AmazonCognitoIdentityClient identityClient = new AmazonCognitoIdentityClient(); 
     identityClient.setRegion(RegionUtils.getRegion(Configuration.REGION)); 
     GetOpenIdTokenResult tokenResp = identityClient.getOpenIdToken(tokenRequest); 

Allerdings habe ich verwende Facebook nicht.

Also habe ich versucht, einige so etwas wie dieses

providerTokens.put("customdeveloper.authentication.com", "xxxxxxxxxxxx"); 
tokenRequest.setLogins(providerTokens); 

einen Fehler bekommen, dass meine Entwickler-Authentifizierung keine öffentliche Anbieter.

Ich bin ziemlich verwirrt, wenn ich in die richtige Richtung gehe. Ich möchte im Grunde meinen Benutzer authentifizieren. Etwas Ähnliches wie oauth2, wo ich ein Token erhalte, kann die Benutzeridentität überprüfen.

Wie ist es mit Cognito richtig?

Antwort

1

Die Cognito-Dokumentation ist ziemlich vage auf der Serverseite, aber ich finde einen Weg, es zu tun.

Im Grunde müssen Sie die Identität ID und das Cognito Token an den Server übergeben. Dann wird auf dem Server tun Sie etwas wie folgt aus:

// Create the request object    
     Map providerTokens = new HashMap(); 
     providerTokens.put("cognito-identity.amazonaws.com", "auidhashaisdhals"); 
     tokenRequest.setLogins(providerTokens); 

     AmazonCognitoIdentityClient identityClient = new AmazonCognitoIdentityClient(); 
     identityClient.setRegion(RegionUtils.getRegion(Configuration.REGION)); 
     GetCredentialsForIdentityRequest request = new GetCredentialsForIdentityRequest(); 
     request.withLogins(providerTokens); 
     request.setIdentityId("us-east-1:XXXXX-9ac6-YYYY-ac07-ZZZZZZZZZZZZ"); 
     GetCredentialsForIdentityResult tokenResp = identityClient.getCredentialsForIdentity(request); 

Wenn Sie die richtige Cognito Token haben, dann sollten Sie in der Lage sein, die Identität zu erhalten und zu authentifizieren. Wenn das Token ungültig ist, authentifizieren Sie Ihren Benutzer nicht.

Amazon gibt eine Ausnahme aus, wenn das Token ungültig ist, sodass Sie einen 404-Fehler abfangen und zurückgeben können.

2

Ja, mithilfe der Identitäts-ID und des Cognito-Tokens können Sie getCredentialsForIdentity aufrufen und bestimmen, dass das Token gültig ist und zu dieser Identität gehört.

Sie können diese Anmeldeinformationen dann verwenden, um verschiedene Dienste als diesen Benutzer aufzurufen.

Eine weitere Option ist die Back-End-Server-Logik hinter API-Gateway zu setzen: http://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html

dann Ihre Benutzer würden Anmeldeinformationen Client-Seite bekommen, und telefoniert diese Anmeldeinformationen zu API-Gateway der Fronten Ihrer serverseitige Logik.

Verwandte Themen