Ich arbeite an einem Swift-Projekt, das mehrere in AWS API Gateway integrierte Methoden aufruft. Diese Methoden erfordern IAM-Autorisierung, ich habe diese Methoden mit dem Postman-REST-Client mit AWS Signature V4 mit meinen Anmeldeinformationen getestet, aber ich weiß nicht, ob es der Mangel an Dokumentation oder etwas anderes ist, aber ich kann nicht herausfinden, wie Sie sich bewerben die AWS-Signatur aus meinem Swift-Projekt.API-Gateway-Methode mit IAM-Autorisierung von Swift aufrufen 3
Das verwandte Thema fand ich (es wird in Client-Klasse kommentiert die AWS Schiffe als auch im SDK) diesen Code an die Delegaten hinzuzufügen sind oder vor dem Aufruf, da der Client ein Singleton ist:
let credentialProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "YourIdentityPoolId")
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
Ich bin mir ziemlich sicher, dass dieser Code Cognito zum Anmelden verwendet, aber ich möchte Cognito nicht zu meinem Projekt hinzufügen, ich habe meine eigene Datenbank einen Benutzerpool außerhalb von AWS.
Hinweis: Die Swift-Aufrufe funktionieren gut, wenn ich die IAM-Autorisierung in den API-Methoden deaktiviere.
Der Aufruf:
let client = PRUEBAPruebaClient.defaultClient()
client.petstorewalkthroughFlattenallGet().continueWithBlock({(task: AWSTask) -> AnyObject? in
self.showResult(task)
return nil
})
func showResult(task: AWSTask) {
if let error = task.error {
print("Error: \(error)")
} else if let result = task.result {
print(result)
}
}
Die Antwort:
Error: Error Domain=com.amazonaws.AWSAPIGatewayErrorDomain Code=1 "(null)" UserInfo={HTTPBody={
message = "Missing Authentication Token";
}, HTTPHeaderFields=<CFBasicHash 0x17407f600 [0x1a81b4bb8]>{type = immutable dict, count = 9,
entries =>
0 : X-Cache = <CFString 0x170054ee0 [0x1a81b4bb8]>{contents = "Error from cloudfront"}
1 : Content-Type = <CFString 0x170054c70 [0x1a81b4bb8]>{contents = "application/json"}
2 : x-amzn-ErrorType = <CFString 0x17007b0c0 [0x1a81b4bb8]>{contents = "MissingAuthenticationTokenException"}
3 : x-amzn-RequestId = <CFString 0x17007b300 [0x1a81b4bb8]>{contents = "3c410741-d38e-11e6-9d84-09cbdcab48a7"}
4 : Via = <CFString 0x1700bd040 [0x1a81b4bb8]>{contents = "1.1 9d0536684daddf203ff3b546b85c5dfe.cloudfront.net (CloudFront)"}
6 : Date = <CFString 0x170054b50 [0x1a81b4bb8]>{contents = "Thu, 05 Jan 2017 21:30:53 GMT"}
10 : Content-Length = 43
11 : X-Amz-Cf-Id = <CFString 0x1700996e0 [0x1a81b4bb8]>{contents = "dEYo5M0iFCthvydhiViK2L-DlzwoeX0mSHQ1YTBAtQZL0m_w_jdc2g=="}
12 : Connection = <CFString 0x170037760 [0x1a81b4bb8]>{contents = "keep-alive"}
}
}
Vielen Dank für Ihre Hilfe !!!