Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda> Object Storage Service> Referencia de la API> Llamar a APIs> Autenticación> Autenticación de la firma transportada en la tabla cargada a través de un navegador
Actualización más reciente 2023-07-11 GMT+08:00

Autenticación de la firma transportada en la tabla cargada a través de un navegador

OBS admite la carga de objetos basada en navegador utilizando el método POST. Las firmas de dichas solicitudes se cargan en tablas. En primer lugar, cree una política de seguridad y especifique los requisitos de la solicitud, por ejemplo, nombre de bucket y prefijo de nombre de objeto. A continuación, cree una firma basada en esta política. El formulario de solicitud que se va a firmar debe contener una firma y una política válidas. Por último, cree una tabla para cargar el objeto en el bucket.

El proceso de cálculo de firmas es el siguiente:

  1. El contenido de la política está codificado en formato UTF-8.
  2. Realizar codificación de Base64 sobre el resultado obtenido del paso anterior.
  3. Utilice el SK para realizar el cálculo de la firma HMAC-SHA1 en el resultado obtenido del paso 2.
  4. Realice la codificación de Base64 en el resultado de la etapa 3 para obtener la firma.
StringToSign = Base64( UTF-8-Encoding-Of( policy ) )
Signature = Base64( HMAC-SHA1( YourSecretAccessKeyID, StringToSign ) )

El contenido de la política es el siguiente:
{ "expiration": "2017-12-31T12:00:00.000Z",
  "conditions": [
    {"x-obs-acl": "public-read" },
    {"x-obs-security-token": "YwkaRTbdY8g7q...." },
    {"bucket": "book" },
    ["starts-with", "$key", "user/"]
  ]
}

La póliza contiene el período de validez (véase Caducidad) y las condiciones (véase Condiciones)

Caducidad

El campo de expiration describe cuándo caducará la firma, que se expresa en el formato según ISO 8601 UTC. Por ejemplo, expiration: 2017-12-31T12:00:00.000Z en el ejemplo significa que la solicitud se invalida después de las 12:00:00 del 31 de diciembre de 2017. Este campo debe especificarse en una política. Solo puede estar en el formato yyyy-MM-dd'T'HH:mm:ss'Z' o yyyy-MM-dd'T'HH:mm:ss.SSS'Z'.

Condiciones

Un mecanismo utilizado para verificar la validez de una solicitud. Las condiciones se utilizan para definir el contenido que debe estar contenido en una solicitud. En el ejemplo, el nombre del bucket solicitado es book, el nombre del objeto tiene el prefijo user/ y la ACL del objeto es de lectura pública. Todos los elementos del formulario, excepto AccessKeyId, signature, file, policy, token, field names y el prefijo x-ignore-, deben incluirse en la política. En la siguiente tabla se enumeran los elementos que deben incluirse en las condiciones.

Tabla 1 Condiciones contenidas en una política

Elemento

Descripción

x-obs-acl

ACL en la solicitud.

Soporta la coincidencia exacta y la coincidencia condicional, como starts-with.

content-length-range

Longitud máxima y mínima de un objeto que se va a cargar. El valor puede ser un rango.

Cache-Control, Content-Type, Content-Disposition, Content-Encoding, Expires

Cabeceras especiales para solicitudes REST

Soporta la coincidencia exacta y la coincidencia condicional, como starts-with.

key

Nombre de un objeto que se va a cargar.

Soporta la coincidencia exacta y la coincidencia condicional, como starts-with.

bucket

Nombre del bucket solicitado.

Soporta coincidencia exacta.

success_action_redirect

Dirección de redirección después de que la carga se haya realizado correctamente. Para más detalles, consulte Carga de objetos - POST.

Soporta la coincidencia exacta y la coincidencia condicional, como starts-with.

success_action_status

Si no se especifica success_action_redirect, el código de estado se devuelve al cliente cuando la carga se realiza correctamente. Para más detalles, consulte Carga de objetos - POST.

Soporta coincidencia exacta.

x-obs-meta-*

Metadatos definidos por el usuario.

Las palabras clave de un elemento no pueden contener los caracteres no de ASCII o irreconocibles. Si son necesarios los caracteres no de ASCII o irreconocibles, deben codificarse y decodificarse en el lado del cliente. La codificación URL o la codificación Base64 son aceptables, pero el servidor no realiza la decodificación.

Soporta la coincidencia exacta y la coincidencia condicional, como starts-with.

x-obs-*

Otros campos de encabezado con prefijo x-obs-.

Soporta la coincidencia exacta y la coincidencia condicional, como starts-with.

x-obs-security-token

Nombre del campo en el encabezado de solicitud.

Campo obligatorio para la autenticación temporal de AK/SK y token de seguridad.

Las condiciones de la política se pueden comparar de las siguientes maneras:

Tabla 2 Métodos de coincidencia de condiciones de la política

Método de coincidencia

Descripción

Exact Matches

Coincidencia exacta por defecto. El valor de la tabla POST debe ser el mismo que el de la política. Por ejemplo, si el objeto ACL se establece en public-read cuando se carga el objeto, el valor del elemento x-obs-acl en la tabla es public-read. Por lo tanto, las condiciones de la política se pueden establecer en

{"x-obs-acl": "public-read"} o ["eq", "$x-obs-acl", "public-read"], que son equivalentes.

Starts With

Si se utiliza esta condición, el valor establecido en la tabla POST debe comenzar con una string de caracteres fija. Por ejemplo, si el nombre de los objetos cargados debe tener el prefijo user/, el valor del elemento key en la tabla puede ser user/test1, user/test2, etc. Por lo tanto, las condiciones de la política se pueden establecer en:

["starts-with", "$key", "user/"]

Matching Any Content

El elemento correspondiente en la tabla POST puede ser cualquier valor. Por ejemplo, si la dirección de redirección tras el éxito de la solicitud puede ser cualquier dirección, el valor del elemento success_action_redirect en la tabla puede ser cualquier valor. Por lo tanto, las condiciones de la política se pueden establecer en:

["starts-with", "$success_action_redirect", ""]

Specifying Ranges

La longitud de contenido del elemento file en la tabla POST puede ser un rango especificado y se utiliza solo para limitar el tamaño del objeto. Por ejemplo, si el tamaño del objeto cargado está entre 1 MB y 10 MB, la longitud del contenido del elemento file en la tabla puede ser de 1048576 a 10485760 Por lo tanto, las condiciones de la política se pueden establecer en (el valor no contiene comillas)

["content-length-range", 1048576, 10485760]

Una política está en formato JSON. Las condiciones se pueden poner entre corchetes rizados {} y corchetes cuadrados []. Los elementos clave y valor de la tabla se escriben entre corchetes rizados {}, que están separados por dos puntos (:). Los corchetes [] contienen el tipo de condición, la clave y el valor, que están separados por comas (,). El signo de dólar ($) delante de la clave indica que la clave es una variable.

Los siguientes caracteres deben escaparse en una política:

Tabla 3 Personajes que deben escaparse en una política

Personaje después de escapar

Carácter real

\\

Barra diagonal inversa (\)

\$

Símbolo del dólar ($)

\b

Tecla retroceso

\f

Página arriba y abajo

\n

Saltos de línea

\r

Ingresar

\t

Tabla horizontal

\v

Tabla vertical

\uxxxx

Todos los caracteres Unicode

Ejemplos de solicitud y política

En las tablas siguientes se proporcionan ejemplos de solicitudes y políticas.

Ejemplo 1: Subir el objeto testfile.txt al bucket examplebucket y establecer el objeto ACL a public-read.

Solicitud

Política

POST / HTTP/1.1

Host: examplebucket.obs.region.myhuaweicloud.com

Content-Type: multipart/form-data; boundary=7e32233530b26

Content-Length: 1250

--7e32233530b26

Content-Disposition: form-data; name="key"

testfile.txt

--7e32233530b26

Content-Disposition: form-data; name="x-obs-acl"

public-read

--7e32233530b26

Content-Disposition: form-data; name="content-type"

text/plain

--7e32233530b26

Content-Disposition: form-data; name="AccessKeyId"

UDSIAMSTUBTEST000002

--7e32233530b26

Content-Disposition: form-data; name="policy"

ewogICJleHBpcmF0aW9uIjogIjIwMTktMDctMDFUMTI6MDA6MDAuMDAwWiIsCiAgImNvbmRpdGlvbnMiOiBbCiAgICB7ImJ1Y2tldCI6ICJleGFtcGxlYnVja2V0IiB9LAogICAgWyJlcSIsICIka2V5IiwgInRlc3RmaWxlLnR4dCJdLAoJeyJ4LW9icy1hY2wiOiAicHVibGljLXJlYWQiIH0sCiAgICBbImVxIiwgIiRDb250ZW50LVR5cGUiLCAidGV4dC9wbGFpbiJdLAogICAgWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsIDYsIDEwXQogIF0KfQo=

--7e32233530b26

Content-Disposition: form-data; name="signature"

xxl7bZs/5FgtBUggOdQ88DPZUo0=

--7e32233530b26

Content-Disposition: form-data; name="file"; filename="E:\TEST_FILE\TEST.txt"

Content-Type: text/plain

123456

--7e32233530b26

Content-Disposition: form-data; name="submit"

Upload

--7e32233530b26--

{

"expiration": "2019-07-01T12:00:00.000Z",

"conditions": [

{"bucket": "examplebucket" },

["eq", "$key", "testfile.txt"],

{"x-obs-acl": "public-read" },

["eq", "$Content-Type", "text/plain"]

]

}

Ejemplo 2: Sube el objeto file/obj1 al bucket examplebucket y configura los cuatro elementos de metadatos personalizados del objeto.

Solicitud

Política

POST / HTTP/1.1

Host: examplebucket.obs.region.myhuaweicloud.com

Content-Type: multipart/form-data; boundary=7e329d630b26

Content-Length: 1597

--7e3542930b26

Content-Disposition: form-data; name="key"

file/obj1

--7e3542930b26

Content-Disposition: form-data; name="AccessKeyId"

UDSIAMSTUBTEST000002

--7e3542930b26

Content-Disposition: form-data; name="policy"

ewogICJleHBpcmF0aW9uIjogIjIwMTktMDctMDFUMTI6MDA6MDAuMDAwWiIsCiAgImNvbmRpdGlvbnMiOiBbCiAgICB7ImJ1Y2tldCI6ICJleGFtcGxlYnVja2V0IiB9LAogICAgWyJzdGFydHMtd2l0aCIsICIka2V5IiwgImZpbGUvIl0sCiAgICB7Ingtb2JzLW1ldGEtdGVzdDEiOiJ2YWx1ZTEifSwKICAgIFsiZXEiLCAiJHgtb2JzLW1ldGEtdGVzdDIiLCAidmFsdWUyIl0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiR4LW9icy1tZXRhLXRlc3QzIiwgImRvYyJdLAogICAgWyJzdGFydHMtd2l0aCIsICIkeC1vYnMtbWV0YS10ZXN0NCIsICIiXQogIF0KfQo=

--7e3542930b26

Content-Disposition: form-data; name="signature"

HTId8OCBisn6FfdWKqSJP9RN4Oo=

--7e3542930b26

Content-Disposition: form-data; name="x-obs-meta-test1"

value1

--7e3542930b26

Content-Disposition: form-data; name="x-obs-meta-test2"

value2

--7e3542930b26

Content-Disposition: form-data; name="x-obs-meta-test3"

doc123

--7e3542930b26

Content-Disposition: form-data; name="x-obs-meta-test4"

my

--7e3542930b26

Content-Disposition: form-data; name="file"; filename="E:\TEST_FILE\TEST.txt"

Content-Type: text/plain

123456

--7e3542930b26

Content-Disposition: form-data; name="submit"

Upload

--7e3542930b26--

{

"expiration": "2019-07-01T12:00:00.000Z",

"conditions": [

{"bucket": "examplebucket" },

["starts-with", "$key", "file/"],

{"x-obs-meta-test1":"value1"},

["eq", "$x-obs-meta-test2", "value2"],

["starts-with", "$x-obs-meta-test3", "doc"],

["starts-with", "$x-obs-meta-test4", ""]

]

}