0 purchases
aws signature v4
AWS Signature Version 4 #
An HTTP request signer for AWS Signature Version 4, which can be used to communicate with AWS services. Works in Web, VM, and Flutter projects.
Using the Signer #
To get started using the signer, add it as a dependency in your pubspec.yaml and create an instance in your project.
dependencies:
aws_common: ^0.3.0
aws_signature_v4: ^0.3.0
copied to clipboard
import 'package:aws_signature_v4/aws_signature_v4.dart';
const signer = AWSSigV4Signer();
copied to clipboard
AWS credentials are configured in the signer by overriding the credentialsProvider parameter of the constructor. By default, the signer
pulls credentials from your environment via the AWSCredentialsProvider.environment() provider. On mobile and web, this means using
the Dart environment which is configured by passing the --dart-define flag to your flutter commands, e.g.
$ flutter run --dart-define=AWS_ACCESS_KEY_ID=... --dart-define=AWS_SECRET_ACCESS_KEY=...
copied to clipboard
On Desktop, credentials are retrieved from the system's environment using Platform.environment.
The signer works by transforming HTTP requests using your credentials to create signed HTTP requests which can be sent off in the
same way as normal HTTP requests.
Example #
As an example, here's how you would sign a request to Cognito to gather information about a User Pool.
import 'dart:convert';
import 'package:aws_common/aws_common.dart';
import 'package:aws_signature_v4/aws_signature_v4.dart';
// Create the signer instance with credentials from the environment.
const signer = AWSSigV4Signer(
credentialsProvider: AWSCredentialsProvider.environment(),
);
// Create the signing scope and HTTP request
const region = '<YOUR-REGION>';
final scope = AWSCredentialScope(
region: region,
service: AWSService.cognitoIdentityProvider,
);
final request = AWSHttpRequest(
method: AWSHttpMethod.post,
uri: Uri.https('cognito-idp.$region.amazonaws.com', '/'),
headers: const {
AWSHeaders.target: 'AWSCognitoIdentityProviderService.DescribeUserPool',
AWSHeaders.contentType: 'application/x-amz-json-1.1',
},
body: json.encode({
'UserPoolId': '<YOUR-USER-POOL-ID>',
}).codeUnits,
);
// Sign and send the HTTP request
final signedRequest = await signer.sign(
request,
credentialScope: scope,
);
final resp = await signedRequest.send();
final respBody = await resp.decodeBody();
safePrint(respBody);
copied to clipboard
For a full example, check out the example project in the GitHub repo.
And for specifics on the different AWS operations you can perform, check out the AWS API Reference docs for the service. For example,
here are the docs for the DescribeUserPool API used above.
Testing #
Make sure you have pulled down this repository's submodules
git submodule update --init
copied to clipboard
Run dart test
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.