Amazon-Signature4-Lite

 view release on metacpan or  search on metacpan

share/README.md  view on Meta::CPAN

* [SEE ALSO](#see-also)
# NAME

Amazon::Signature4::Lite - Lightweight AWS Signature Version 4 signing

# SYNOPSIS

    use Amazon::Signature4::Lite;

    my $signer = Amazon::Signature4::Lite->new(
      access_key    => $access_key_id,
      secret_key    => $secret_access_key,
      session_token => $session_token,   # optional, for STS/IAM roles
      region        => 'us-east-1',
      service       => 's3',             # default
    );

    my $signed = $signer->sign(
      method  => 'PUT',
      url     => 'https://s3.amazonaws.com/my-bucket/my-key',
      headers => { 'Content-Type' => 'application/gzip' },
      payload => $content,
    );

    # $signed is a hashref of headers ready for HTTP::Tiny:
    # Authorization, x-amz-date, x-amz-content-sha256,
    # x-amz-security-token (if session_token provided), host

    # For streamed content, supply a precomputed SHA-256 hash instead of #
    # passing the complete payload to the signer.

    my $signed = $signer->sign(
      method       => 'PUT',
      url          => 'https://s3.amazonaws.com/my-bucket/my-key',
      headers      => { 'Content-Type' => 'application/octet-stream', 'Content-Length' => $content_length, },
      payload_hash => $payload_hash,
    );

# DESCRIPTION

A minimal, dependency-free AWS Signature Version 4 implementation for
signing S3 and other AWS API requests. Unlike [AWS::Signature4](https://metacpan.org/pod/AWS%3A%3ASignature4), this
module does not depend on [LWP](https://metacpan.org/pod/LWP) or [HTTP::Request](https://metacpan.org/pod/HTTP%3A%3ARequest) - it works
directly with the plain scalars and hashrefs that [HTTP::Tiny](https://metacpan.org/pod/HTTP%3A%3ATiny) uses.

For large or streamed request bodies, callers may provide a precomputed
SHA-256 payload hash, allowing the request to be signed without holding
the complete payload in memory.

# METHODS

## new(%args)

    my $signer = Amazon::Signature4::Lite->new(
      access_key => $key,
      secret_key => $secret,
      region     => 'us-east-1',
    );

Required: `access_key`, `secret_key`, `region`.
Optional: `session_token` (for temporary credentials), `service`
(defaults to `s3`).

## sign(%args)

    my $headers = $signer->sign(
      method  => 'GET',
      url     => $url,
      headers => %extra_headers,
      payload => $body,
    );

Signs an AWS request and returns a hash reference containing the HTTP
headers required for the request.

Arguments:

- method

    HTTP request method. Defaults to `GET`.

- url

    The complete request URL. Required.

- headers

    Optional hash reference containing additional request headers to include
    in the signature.

- payload

    The request body. The SHA-256 hash used in the canonical request is
    calculated from this value.

    If neither `payload` nor `payload_hash` is supplied, the payload is
    treated as an empty string.

- payload\_hash

    An optional precomputed SHA-256 hash of the request body.

    When supplied, `payload_hash` is used directly in the canonical request
    and, by default, as the value of the `x-amz-content-sha256` header. The
    `payload` value is not hashed.

    This is useful when the request body will be streamed and holding the
    complete payload in memory solely for signing would be undesirable. The
    caller is responsible for ensuring that `payload_hash` corresponds
    exactly to the content that will be transmitted.

    my $headers = $signer->sign(
    method       => 'PUT',
    url          => $url,
    headers      => %extra\_headers,
    payload\_hash => $sha256,
    );

- add\_sha256\_header

    Controls whether `x-amz-content-sha256` is included in the returned



( run in 0.687 second using v1.01-cache-2.11-cpan-3f962061493 )