Cuando envíe solicitudes a OSS, debe incluir un encabezado de solicitud Authorization que contenga una firma V4 para garantizar que la autenticación sea exitosa. Se recomienda utilizar primero el SDK proporcionado por OSS para enviar las solicitudes, ya que este integra el algoritmo de firma V4. Consulte esta documentación para implementar manualmente el algoritmo de firma V4 únicamente cuando no sea posible usar el SDK.
Usar los SDK de OSS para implementar firmas V4 automáticamente
Si necesita implementar el algoritmo de firma V4, consulte la implementación de dicha firma en los SDK de OSS.
|
SDK |
Implementación |
Encabezados de solicitud de autorización
Cuando envíe una solicitud a OSS, debe implementar la firma en el encabezado Authorization para verificar la solicitud.
A continuación se muestra la sintaxis del encabezado Authorization:
Authorization: OSS4-HMAC-SHA256 Credential=<AccessKeyId>/<SignDate>/<SignRegion>/oss/aliyun_v4_request, AdditionalHeaders=<AdditionalHeadersVal>, Signature=<SignatureVal>
A continuación se describe el encabezado Authorization:
|
Componente |
Descripción |
|
OSS4-HMAC-SHA256 |
Especifica el algoritmo utilizado para calcular la firma. Esta cadena indica la versión de la firma y el algoritmo de firmado (HMAC-SHA256). El valor OSS4-HMAC-SHA256 es obligatorio cuando se usan firmas V4 para la autenticación. |
|
Credential |
Indica el ID de AccessKey y el alcance, que incluye la fecha, la región y el servicio en la nube utilizados para calcular la firma. Este campo es obligatorio cuando se usan firmas V4 para la autenticación. La sintaxis es la siguiente:
Donde:
|
|
AdditionalHeaders |
Especifique los encabezados de solicitud opcionales que se incluyen en el cálculo de la firma (no es necesario especificar los encabezados obligatorios que deben incluirse en dicho cálculo). Este campo contiene únicamente nombres de encabezados en minúsculas, ordenados lexicográficamente y separados por punto y coma (;). El ejemplo es el siguiente:
|
|
Signature |
La firma calculada. Este campo es obligatorio cuando se usan firmas V4 para la autenticación. El siguiente código de ejemplo muestra un valor de firma de 256 bits representado con 64 dígitos hexadecimales en minúsculas:
|
Cálculo de la firma
Tras recibir una solicitud, OSS calcula la firma y la compara con la del encabezado de solicitud Authorization. Si coinciden, la solicitud se procesa correctamente. De lo contrario, la solicitud falla.
Proceso de cálculo de la firma
La siguiente figura muestra el proceso de cálculo de la firma:
El proceso de cálculo de la firma consta de los tres pasos siguientes:
Construir una solicitud canónica: formatee la solicitud según las especificaciones de firma de OSS para generar una solicitud canónica.
Construir una cadena para firmar: concatene la solicitud canónica para obtener la cadena para firmar.
Calcular la firma: aplique varias operaciones de hash al AccessKey Secret para generar una clave derivada. Después, use esta clave derivada para calcular la cadena para firmar y obtener la firma final. Al aplicar múltiples operaciones HMAC-SHA256 al AccessKey Secret, se genera una clave derivada que permite calcular el hash HMAC-SHA256 de la cadena para firmar, lo cual da como resultado la firma final.
1. Construir una solicitud canónica
La sintaxis de una solicitud canónica es la siguiente:
HTTP Verb + "\n" +
Canonical URI + "\n" +
Canonical Query String + "\n" +
Canonical Headers + "\n" +
Additional Headers + "\n" +
Hashed PayLoad
En la siguiente tabla se describen los parámetros de una solicitud canónica:
|
Parámetro |
Descripción |
|
HTTP Verb |
El método de solicitud HTTP, como PUT, GET, POST, HEAD, DELETE y OPTIONS. |
|
Canonical URI |
La ruta del recurso codificada en URI. La ruta del recurso no incluye la cadena de consulta y no es necesario codificar las barras diagonales (
|
|
Canonical Query String |
Los parámetros de consulta codificados en URI y ordenados lexicográficamente.
|
|
Canonical Headers |
La lista de encabezados de solicitud. Los encabezados de solicitud se dividen en las tres categorías siguientes:
La sintaxis es la siguiente:
El siguiente código muestra un ejemplo:
|
|
Additional Headers |
Especifica los encabezados de solicitud opcionales que se incluyen en el cálculo de la firma (no es necesario especificar los encabezados obligatorios que deben incluirse en dicho cálculo). Este campo contiene únicamente nombres de encabezados en minúsculas, ordenados lexicográficamente y separados por punto y coma (;), de manera coherente con Especifique los encabezados opcionales que se incluyen en el cálculo de la firma (excluyendo los obligatorios). Solo se admiten nombres de encabezados en minúsculas, ordenados lexicográficamente. Estos se separan con punto y coma ( El siguiente código muestra un ejemplo:
|
|
Hashed PayLoad |
La representación hexadecimal del valor de hash SHA256 de la carga útil de la solicitud. Solo es compatible con el valor |
2. Construir una cadena para firmar
La sintaxis de la cadena para firmar es la siguiente:
"OSS4-HMAC-SHA256" + "\n" +
TimeStamp + "\n" +
Scope + "\n" +
Hex(SHA256Hash(<CanonicalRequest>))
En la siguiente tabla se describen los parámetros de la cadena para firmar:
|
Parámetro |
Descripción |
|
OSS4-HMAC-SHA256 |
El algoritmo de hash de la firma. El valor debe ser |
|
TimeStamp |
La hora UTC actual, cuya sintaxis debe cumplir con el estándar ISO8601, por ejemplo, |
|
Scope |
El conjunto de parámetros para obtener la clave derivada. Este conjunto especifica la fecha, la región y el servicio. Por lo tanto, la firma calculada con la clave derivada solo es válida para la fecha, la región y el servicio indicados. La sintaxis es la siguiente:
La descripción es la siguiente:
|
|
CanonicalRequest |
La solicitud canónica construida. |
3. Calcular una firma
El cálculo de una firma implica los dos pasos siguientes:
-
Calcule el valor de
SigningKey.DateKey = HMAC-SHA256("aliyun_v4" + SK, Date); DateRegionKey = HMAC-SHA256(DateKey, Region); DateRegionServiceKey = HMAC-SHA256(DateRegionKey, "oss"); SigningKey = HMAC-SHA256(DateRegionServiceKey, "aliyun_v4_request");SK: el AccessKey Secret incluido en la firma.Date: la fecha incluida en la firma con el formatoYYYYMMDD, la cual debe coincidir con el valor deSignDatede la cadena para firmar.Region: la region ID utilizada para la firma, comocn-hangzhou, que debe coincidir con el valor deSignRegionde la cadena para firmar.
-
Calcule el valor de
SignaturemedianteSigningKeyy la cadena para firmar.Signature = HEX(HMAC-SHA256(SigningKey, StringToSign))
Ejemplo de cálculo de firma
El siguiente ejemplo muestra cómo calcular una firma al llamar a la operación PutObject.
Parámetros para el cálculo de la firma
|
Parámetro |
Valor |
|
AccessKeyId |
LTAI |
|
AccessKeySecret |
yourAccessKeySecret |
|
Timestamp |
20250411T064124Z |
|
Bucket |
examplebucket |
|
Object |
exampleobject |
|
Region |
cn-hangzhou |
Ejemplo de cálculo de firma
-
Construya una solicitud canónica.
PUT /examplebucket/exampleobject content-disposition:attachment content-length:3 content-md5:ICy5YqxZB1uWSwcVLSNLcA== content-type:text/plain x-oss-content-sha256:UNSIGNED-PAYLOAD x-oss-date:20250411T064124Z content-disposition;content-length UNSIGNED-PAYLOAD -
Construya una cadena para firmar.
OSS4-HMAC-SHA256 20250411T064124Z 20250411/cn-hangzhou/oss/aliyun_v4_request c46d96390bdbc2d739ac9363293ae9d710b14e48081fcb22cd8ad54b63136eca -
Calcule la firma.
-
Calcule el SigningKey.
NotaPara facilitar la lectura, el siguiente valor de
SigningKeyse muestra en formato hexadecimal.3543b7686e65eda71e5e5ca19d548d78423c37e8ddba4dc9d83f90228b457c76 -
Calcule el Signature.
053edbf550ebd239b32a9cdfd93b0b2b3f2d223083aa61f75e9ac16856d61f23
-