2016-05-08 3 views
0

Ich versuche, mein API-Gateway mit authentifizierten Benutzern mit der REST-API aufzurufen. Dafür verwende ich: Cognito UserPool + Cognito Identity Pool + API Gateway + AWS_IAM Authorization + Cognito Credentials. Nach dem, was ich gesammelt habe, muss ich meine Anfrage mit (temporäre Anmeldeinformationen) unterschreiben. Basierend auf this thread möchte ich meine Anfrage mit den folgenden Schlüssel zu unterschreiben:Unterschreiben mit temporären Anmeldeinformationen für API-Gateway-Anforderungsprobleme

{ 
SecretKey: '', 
AccesKeyId: '', 
SessionKey: '' 
} 

Wenn ich einen zugehörigen Benutzer von meiner IAM-Konsole verwenden und die entsprechende SecretKey + AccesKeyID alles funktioniert. Ich möchte jedoch die Rollen Nicht authentifiziert und Authentifiziert von meinen Identitätspools verwenden, um IAM-Richtlinien auf der Basis authentifizierter oder nicht authentifizierter Benutzer anzuwenden. FYI: Ich kann die authentifizierte Funktionen aufrufen aus this part of the documentation.

Ich baue eine Reaktivierungs native App, und wegen, dass ich das native SDK auf ein Minimum halten wollen, und ich verwende nur AWSCognitoIdentityProvider Teil. Für die Benutzerhandhabung.

Ich versuche, die richtigen Tasten mit dieser Objective-C-Code zu erhalten:

[[self.credentialsProvider credentials] continueWithBlock:^id(AWSTask *task) { 
    if (task.error) { 
     NSLog(@"Error: %@", task.error); 
    } 
    else { 
     AWSCredentials *response = task.result; 

     NSString *accessKey = response.accessKey; 
     NSString *secretKey = response.secretKey; 
     NSString *sessionKey = response.sessionKey; 
     NSDictionary *responseData = @{ 
            @"AccessKey" : accessKey, 
            @"SecretKey" : secretKey, 
            @"SessionKey": sessionKey 
            }; 
     } 

    return nil; 
    }]; 

Den Rest habe ich Setup die relevant docs.

verwendet haben

I (zu Unrecht?) Versucht, meine Anfragen mit der zu unterschreiben
AccessKey, SecretKey, SessionKey vom CredentialsProvider abgerufen oben.

{ 
    SecretKey: credentials.SecretKey, 
    AccesKeyId: credentials.AccessKey, 
    SessionKey: credentials.SessionKey 
    } 

Die Unterzeichnung schlägt mit dem folgenden Fehler:

{ message: 'The security token included in the request is invalid.' } 

So ist die Frage, die ich habe, ist: welche Schlüssel sollte ich so verwenden, um meine Anfragen für authentifizierte Benutzer unterschreiben, dass ich die beigefügten IAM Richtlinien anwenden können von meinem Cognito-Setup?

Vielen Dank für jede Hilfe :)

+1

'SessionKey'? Nicht 'SessionToken'? –

Antwort

Verwandte Themen