2016-04-25 5 views
4

Ich habe einen Cognito User Pool erstellt. Ich kann die Benutzer auflisten und die Benutzer mithilfe des AWSCognitoIdentityProviderClient aus dem Java AWS SDK hinzufügen.Wie authentifiziere ich mich bei einem AWS Cognito User Pool

Allerdings habe ich eine benutzerdefinierte Login-Seite und ich möchte den eingegebenen Benutzernamen und das Passwort eingeben und authentifizieren gegen meinen Benutzerpool. Ich sehe nirgendwo im Java AWS SDK, wo ich Anmeldeinformationen weitergeben und ein Authentifizierungsergebnis erhalten kann.

Edit: Ich kann nicht nach diesem Fehler erhalten:

NotAuthorizedException: Fehlende Anmeldeinformationen in der Konfigurations

Relevante Code:

AWS.config.region = 'us-east-1'; 
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
     IdentityPoolId: 'us-east-1:087a3210-64f8-4dae-9e3c...' // your identity pool id here 
    }); 

    AWSCognito.config.region = 'us-east-1'; 
    AWSCognito.config.credentials = new AWS.CognitoIdentityCredentials({ 
     IdentityPoolId: 'us-east-1:087a3210-64f8-4dae-9e3c...' // your identity pool id here 
    }); 

    var poolData = { 
     UserPoolId: 'us-east-1_39RP...', 
     ClientId: 'ttsj9j5...', 
     ClientSecret: 'bkvkj9r8kl2ujrlu41c7krsb6r7nub2kb260gj3mgi...' 
    }; 
    var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData); 

    var authenticationData = { 
     Username: '[email protected]', 
     Password: 'foobarfoo', 
    }; 
    var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData); 
    var userData = { 
     Username: '[email protected]', 
     Pool: userPool 
    }; 
    var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData); 
    cognitoUser.authenticateUser(authenticationDetails, { 
     onSuccess: function (result) { 
      console.log('access token + ' + result.getAccessToken().getJwtToken()); 
     }, 

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

    }); 
+0

sieht aus wie Sie Javascript verwenden - das ist nicht Java. – ecoe

Antwort

3

Die Authentifizierung wird nur über JavaScript, iOS und Android unterstützt bei diesmal. Die notwendigen Apis zur Authentifizierung sind während der Beta nicht Bestandteil der Server-SDKs (Java, Python usw.). Die Verwendung der JavaScript SDK ist die empfohlene Möglichkeit zur Authentifizierung von Ihrer Anmeldeseite.

+0

Ich muss so nah sein, befolgte alle Anweisungen für JavaScript, und jetzt bin ich bei: "ConfigError: Fehlende Anmeldeinformationen in Config", folgenden Anwendungsfall 4: – user1432403

+0

Dies ist ein Artefakt wie das JavaScript SDK generiert wird. Unser JavaScript-SDK geht davon aus, dass alle AWS-Dienste Anmeldeinformationen benötigen, aber einige haben nicht authentifizierte Apis und benötigen sie nicht. Wenn Sie einige willkürliche Werte wie ACCESS_KEY und SECRET_KEY für Ihre Anmeldeinformationen eingeben, sollte es funktionieren. – behrooziAWS

+0

Es funktionierte, ich lese endlich die Anweisungen und erstellte eine App, ohne die generierte Client-Secret-Box zu überprüfen – user1432403

2

Check hier https://github.com/aws/amazon-cognito-identity-js

gibt es eine fehlende Codezeile

Diese Seite http://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-user-identity-pools-javascript-examples.html nicht

aktualisiert diese
// Need to provide placeholder keys unless unauthorised user access is enabled for user pool 
AWSCognito.config.update({accessKeyId: 'anything', secretAccessKey: 'anything'}) 

Nach einschließlich ich diesen Fehler mit gestoppt.

4

Das AWS Java SDK enthält APIs zur Authentifizierung von Benutzern in einem Benutzerpool. Sie können einen Benutzer authentifizieren, indem Sie entweder die Apache InitiateAuth oder die API API AdminInitiateAuth der Klasse AWSCognitoIdentityProviderClient verwenden. Der Unterschied zwischen diesen beiden APIs wird in der Dokumentation erläutert. Kurz gesagt, für InitiateAuth müssen Sie SRP-Berechnungen durchführen und dann an die API weitergeben, während Sie in AdminInitiateAuth den Benutzernamen und das Passwort direkt übergeben können. Sie können in beiden Fällen über die Auswirkungen auf die Sicherheit lesen und entscheiden, welche verwendet werden soll.

Dokumentation: https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html

API-Referenz: https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html

https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html

Meine Arbeitsprobe (Groovy):

def login() { 
    AWSCognitoIdentityProviderClient client = new AWSCognitoIdentityProviderClient() 
    println("Provider client: " + client) 
    client.setRegion(Region.getRegion(Regions.AP_NORTHEAST_1)) 

    HashMap authParams = new HashMap<>() 
    authParams.put("USERNAME", "User1") 
    authParams.put("PASSWORD", "a*123") 
    AdminInitiateAuthRequest adminInitiateAuthRequest = new AdminInitiateAuthRequest() 
      .withClientId(<YOUR_CLIENT_ID>) 
      .withUserPoolId(<YOUR_USER_POOL_ID>) 
      .withAuthFlow(AuthFlowType.ADMIN_NO_SRP_AUTH) 
      .withAuthParameters(authParams) 
    AdminInitiateAuthResult result = client.adminInitiateAuth(adminInitiateAuthRequest); 
    if (result != null) { 
     System.out.println("AdminInitiateAuthResult:"); 
     System.out.println(result.toString()); 
    } else { 
     System.out.println("No result available"); 
     return; 
    } 
} 
+0

Das war hilfreich, wie erhalten Sie dann die Benutzerdaten, sobald Sie das AdminInitiateAuthResult haben? – gremwell

+0

Ah, habe es herausgefunden, GetUserRequest getUserRequest = new GetUserRequest(). WithAccessToken (initiateAuthResult.getAuthenticationResult(). GetAccessToken()); GetUserResult getUserResult = client.getUser (getUserRequest); – gremwell

+0

adminInitiateAuth erfordert jedoch AWS-Anmeldeinformationen, sodass diese Vorgehensweise nur für Benutzer mit diesen privilegierten Informationen funktioniert. – ecoe