Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda> Object Storage Service> Referência de API> Chamada das API> Autenticação> Autenticação de assinatura realizada na tabela carregada por meio de um navegador
Atualizado em 2022-11-07 GMT+08:00

Autenticação de assinatura realizada na tabela carregada por meio de um navegador

O OBS suporta carregamento de objetos baseado em navegador usando o método POST. As assinaturas de tais solicitações são carregadas em tabelas. Primeiro, crie uma política de segurança e especifique os requisitos na solicitação, por exemplo, nome do intervalo e prefixo do nome do objeto. Em seguida, crie uma assinatura com base nessa política. O formulário de solicitação a ser assinado deve conter assinatura e política válidas. Finalmente, crie uma tabela para carregar o objeto no bucket.

O processo de cálculo da assinatura é o seguinte:

  1. O conteúdo da política é codificado no formato UTF-8.
  2. Execute a codificação Base64 no resultado obtido na etapa anterior.
  3. Use o SK para executar o cálculo da assinatura HMAC-SHA1 no resultado obtido na etapa 2.
  4. Execute a codificação Base64 no resultado da etapa 3 para obter a assinatura.
StringToSign = Base64( UTF-8-Encoding-Of( policy ) )
Signature = Base64( HMAC-SHA1( YourSecretAccessKeyID, StringToSign ) )

O conteúdo da política é o seguinte:
{ "expiration": "2017-12-31T12:00:00.000Z",
  "conditions": [
    {"x-obs-acl": "public-read" },
    {"x-obs-security-token": "YwkaRTbdY8g7q...." },
    {"bucket": "book" },
    ["starts-with", "$key", "user/"]
  ]
}

A apólice contém o período de validade (veja Expiração) e as condições (veja Condições).

Expiração

O campo de expiration descreve quando a assinatura expirará, o que é expresso no formato de acordo com a ISO 8601 UTC. Por exemplo, expiration: 2017-12-31T12:00:00.000Z no exemplo significa que a solicitação se torna inválida após as 12:00:00 do dia 31 de dezembro de 2017. Esse campo deve ser especificado em uma política. Só pode estar no formato aaaa-MM-dd'T'HH:mm:ss'Z' ou aaaa-MM-dd'T'HH:mm:ss.SSS'Z'.

Condições

Um mecanismo usado para verificar a validade de uma solicitação. As condições são usadas para definir o conteúdo que deve estar contido em uma solicitação. No exemplo, o nome do intervalo solicitado é book, o nome do objeto é prefixado com user/ e a ACL do objeto é leitura pública. Todos os itens no formulário, exceto AccessKeyId, signature, file, policy, token, field names e o prefixo x-ignore-, devem ser incluídos na política. A tabela a seguir lista os itens que devem estar contidos em Conditions.

Tabela 1 Condições contidas em uma política

Elemento

Descrição

x-obs-acl

ACL na solicitação.

Suporta correspondência exata e correspondência condicional como starts-with.

content-length-range

Comprimento máximo e mínimo de um objeto a ser carregado. O valor pode ser um intervalo.

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

Cabeçalhos especialmente para solicitações REST

Suporta correspondência exata e correspondência condicional como starts-with.

key

Nome de um objeto a ser carregado.

Suporta correspondência exata e correspondência condicional como starts-with.

bucket

Nome do bucket solicitado.

Suporta correspondência exata.

success_action_redirect

Endereço de redirecionamento após o carregamento ser sucedido. Para mais detalhes, consulte Carregamento de objetos - POST.

Suporta correspondência exata e correspondência condicional como starts-with.

success_action_status

Se success_action_redirect não for especificado, o código de status será retornado ao cliente quando o carregamento for bem-sucedido. Para mais detalhes, consulte Carregamento de objetos - POST.

Suporta correspondência exata.

x-obs-meta-*

Metadados definidos pelo usuário.

Palavras-chave em um elemento não podem conter caracteres não ASCII ou irreconhecíveis. Se não-ASCII ou irreconhecíveis caracteres são necessários, eles devem ser codificados e decodificados no lado do cliente. A codificação URL ou a codificação Base64 são aceitáveis, mas o servidor não realiza a decodificação.

Suporta correspondência exata e correspondência condicional como starts-with.

x-obs-*

Outros campos de cabeçalho com prefixo x-obs-.

Suporta correspondência exata e correspondência condicional como starts-with.

x-obs-security-token

Nome do campo no cabeçalho da solicitação.

Campo obrigatório para a autenticação temporária de AK/SK e token de segurança.

As condições da política podem ser combinadas das seguintes maneiras:

Tabela 2 Métodos de correspondência de condição de política

Método de correspondência

Descrição

Correspondências exatas

Correspondência exata por padrão. O valor na tabela POST deve ser o mesmo da política. Por exemplo, se a ACL do objeto estiver definida como public-read quando o objeto for carregado, o valor do elemento x-obs-acl na tabela será public-read. Portanto, as condições da política podem ser definidas para

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

Começa com

Se essa condição for usada, o valor definido na tabela POST deverá começar com uma seqüência de caracteres fixa. Por exemplo, se o nome dos objetos carregados deve ser prefixado com user/, o valor do elemento key na tabela pode ser user/test1, user/test2, e assim por diante. Portanto, as condições na política podem ser definidas para:

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

Correspondendo a qualquer conteúdo

O elemento correspondente na tabela POST pode ser qualquer valor. Por exemplo, se o endereço de redirecionamento após o sucesso da solicitação puder ser qualquer endereço, o valor do elemento success_action_redirect na tabela poderá ser qualquer valor. Portanto, as condições na política podem ser definidas para:

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

Especificando intervalos

O comprimento do conteúdo do elemento de arquivo na tabela POST pode ser um intervalo especificado e é usado apenas para limitar o tamanho do objeto. Por exemplo, se o tamanho do objeto carregado estiver entre 1 MB e 10 MB, o tamanho do conteúdo do elemento de file na tabela pode ser de 1048576 a 10485760. Portanto, as condições na política podem ser definidas como (o valor não contém aspas)

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

Uma política está no formato JSON. As condições podem ser colocadas em colchetes {} e [] colchetes. Os elementos chave e valor da tabela são escritos nos colchetes {}, que são separados por dois pontos (:). Os colchetes [] contêm o tipo de condição, chave e valor, que são separados por vírgulas (,). O sinal de dólar ($) na frente da chave indica que a chave é uma variável.

Os seguintes caracteres devem ser escapados em uma política:

Tabela 3 Caracteres que devem ser escapados em uma política

Personagem Depois da Fuga

Personagem Real

\\

Barra invertida (\)

\$

Dólar símbolo ($)

\b

Retroceder

\f

Página para cima e para baixo

\n

Quebras de linha

\r

Insira

\t

Mesa horizontal

\v

Mesa vertical

\uxxxx

Todos os caracteres Unicode

Exemplos de solicitação e política

As tabelas a seguir fornecem exemplos de solicitações e políticas.

Exemplo 1:: Carregue o objeto testfile.txt no bucket examplebucket e defina a ACL do objeto como public-read.

Solicitação

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"]

]

}

Exemplo 2: Carregue o objetofile/obj1 no bucket examplebucket e configure os quatro itens de metadados personalizados do objeto.

Solicitação

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", ""]

]

}