The client computes a hashed "signature" with several elements of the request using a SecretAccessKey. This "signature" is sent to the server along with the UserID and the AccessKeyID that are used to compute the signature in the Authorization header. The client also sends an ISO8601 compliant datetime (in UTC and in precision to the second; yyyy-mm-ddThh:mm:ss.ffffff) in the x-dapi-date header as part of the request.
Steps to calculate Authorization Header value on the Client side...
StringToSign = UTF-8-Encoding-Of(canonalizeHeaders( HTTP-Verb + PathInfo + DateTimeStamp + Payload (in case of raw post) + content-type (for POST) )) + file_content_as_bytes;
signature = Base64( HMAC-SHA256(StringToSign,UTF-8-Encoding-Of(secretAccessKey)) );
Authorization Header value = "HMAC_1" + " " + accessKeyId + ":" + signature + ":" + userId);