AWS Authentication Traits#
This document defines AWS authentication schemes.
aws.auth#sigv4
trait#
- Trait summary
- The
aws.auth#sigv4
trait adds support for AWS signature version 4 to a service. - Trait selector
service
- Trait value
An
object
that supports the following properties:Property Type Description name string
Required. The signature version 4 service signing name to use in the credential scope when signing requests. This value MUST NOT be empty. This value SHOULD match the arnNamespace
property of the aws.api#service trait if present and thename
property of the aws.auth#sigv4a trait if present.
If a request contains the Authorization
header or a query string parameter
with the name of X-Amz-Algorithm
containing the value AWS4-HMAC-SHA256
,
the request will undergo authentication and be rejected if it fails. Otherwise,
if the optionalAuth trait is applied, the service shall operate on the
unauthenticated request.
$version: "2"
namespace aws.fooBaz
use aws.api#service
use aws.auth#sigv4
use aws.protocols#restJson1
@service(sdkId: "Some Value")
@sigv4(name: "foobaz")
@restJson1
service FooBaz {
version: "2018-03-17"
}
aws.auth#sigv4a
trait#
- Trait summary
- The
aws.auth#sigv4a
trait adds support for AWS Signature Version 4 Asymmetric (SigV4A), an extension of AWS signature version 4 (SigV4), to a service. - Trait selector
service[trait|aws.auth#sigv4]
- Trait value
An
object
that supports the following properties:Property Type Description name string
Required. The signature version 4a service signing name to use in the credential scope when signing requests. This value MUST NOT be empty. This value SHOULD match the arnNamespace
property of the aws.api#service trait if present and thename
property of the aws.auth#sigv4 trait.
SigV4A is nearly identical to SigV4, but also uses public-private keys and asymmetric cryptographic signatures for every request. Most notably, SigV4A supports signatures for multi-region API requests.
$version: "2"
namespace aws.fooBaz
use aws.api#service
use aws.auth#sigv4
use aws.auth#sigv4a
use aws.protocols#restJson1
// This service is an AWS service that prioritizes SigV4A
// authentication before SigV4 authentication.
// Note that services that support SigV4A MUST support SigV4.
@service(sdkId: "Some Value")
@auth([sigv4a, sigv4])
@sigv4(name: "foobaz")
@sigv4a(name: "foobaz")
@restJson1
service FooBaz {
version: "2018-03-17"
}
aws.auth#unsignedPayload
trait#
- Summary
- Indicates that the payload of an operation is not to be part of the signature computed for the request of an operation.
- Trait selector
operation
- Value type
- Annotation trait
Most requests sent to AWS services require that the payload of the request is signed. However, in some cases, a service that streams large amounts of data with an unknown size at the time a request is initiated might require that the payload of a request is not signed.
The following example defines an operation that indicates the payload of the operation MUST NOT be used as part of the request signature calculation:
$version: "2"
use aws.auth#unsignedPayload
@unsignedPayload
operation PutThings {
input: PutThingsInput
output: PutThingsOutput
}
Unsigned Payloads and signature version 4#
Using an unsigned payload with AWS signature version 4 requires that the
literal string UNSIGNED-PAYLOAD
is used when constructing a
canonical request, and the same value is sent in the
x-amz-content-sha256 header when sending an HTTP request.
aws.auth#cognitoUserPools
trait#
- Trait summary
- The
aws.auth#cognitoUserPools
trait adds support for Amazon Cognito User Pools to a service. - Trait selector
service
- Trait value
An
object
that supports the following properties:Property Type Description providerArns [string]
Required. A list of the Amazon Cognito user pool ARNs. Each element is of this format: arn:aws:cognito-idp:{region}:{account_id}:userpool/{user_pool_id}
.
$version: "2"
namespace aws.fooBaz
use aws.api#service
use aws.auth#cognitoUserPools
use aws.protocols#restJson1
@service(sdkId: "Some Value")
@cognitoUserPools(
providerArns: ["arn:aws:cognito-idp:us-east-1:123:userpool/123"])
@restJson1
service FooBaz {
version: "2018-03-17"
}