Autenticação de assinatura de usuário
O OBS assina uma solicitação usando AK/SK. Quando um cliente está enviando uma solicitação ao OBS, o cabeçalho da mensagem deve conter o SK, a hora da solicitação, o tipo de solicitação e outras informações da assinatura.
- AK: ID da chave de acesso, que é um identificador exclusivo associado a uma chave de acesso secreta (SK). O AK e o SK são usados juntos para obter uma assinatura criptografada para uma solicitação. Exemplo de formato: HCY8BGCN1YM5ZWYOK1MH
- SK: chave de acesso secreta, que é usada em conjunto com o AK para assinar solicitações, identificar o remetente da solicitação e impedir que a solicitação seja modificada. Exemplo de formato: 9zYwf1uabSQY0JTnFqbUqG7vcfqYBaTdXde2GUcq
Um usuário pode obter o AK e o SK do IAM. Para mais detalhes, consulte Obtenção de chaves de acesso (AK/SK).
O OBS fornece três métodos de cálculo de assinatura com base em cenários de aplicativos: Autenticação de assinatura em um cabeçalho, Autenticação de assinatura em um URL, e Autenticação de assinatura realizada na tabela carregada por meio de um navegador.
O SDK fornecido pelo OBS integra o cálculo da assinatura. É recomendável usar o SDK para desenvolvimento.
Tabela 1 mostra o processo de verificação de assinatura do usuário no qual uma assinatura é transportada em um cabeçalho. Para obter detalhes sobre os parâmetros e exemplos de código de autenticação de assinatura em um cabeçalho, consulte Autenticação de assinatura em um cabeçalho.
Procedimento |
Exemplo |
|
---|---|---|
Cálculo de assinatura |
1. Construir uma mensagem HTTP. |
PUT /object HTTP/1.1 Anfitrião: bucket.obs.region.myhuaweicloud.com Data: Tue, 04 Apr 2019 06:54:59 GMT Tipo de conteúdo: text/plain Conteúdo-Comprimento: 5913 |
2. Calcule StringToSign com base na regra de assinatura. |
StringToSign = HTTP-Verb + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedHeaders + CanonicalizedResource |
|
3. Prepare o AK e o SK. |
AK: ****** SK: ****** |
|
4. Calcule Signature. |
Assinatura = Base64( HMAC-SHA1( SecretAccessKeyID, UTF-8-Encoding-Of( StringToSign ) ) ) |
|
5. Adicione um cabeçalho de assinatura e envie a solicitação para o OBS. |
PUT /object HTTP/1.1 Anfitrião: bucket.obs.region.myhuaweicloud.com Data: Tue, 04 Apr 2019 06:54:59 GMT Tipo de conteúdo: text/plain Conteúdo-Comprimento: 5913 Autorização: OBS AccessKeyID:Signature |
|
Autenticação de assinatura |
6. Receber a mensagem HTTP. |
PUT /object HTTP/1.1 Anfitrião: bucket.obs.region.myhuaweicloud.com Data: Tue, 04 Apr 2019 06:54:59 GMT Tipo de conteúdo: text/plain Conteúdo-Comprimento: 5913 Autorização: OBS AccessKeyID:Signature |
7. Obtenha o SK com base no AK na solicitação. |
Obtenha o AK do cabeçalho de autorização e obtenha o SK do usuário do IAM. |
|
8. Calcule o StringToSign com base na regra de assinatura. |
StringToSign = HTTP-Verb + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedHeaders + CanonicalizedResource |
|
9. Calcule Signature. |
Assinatura = Base64( HMAC-SHA1( SecretAccessKeyID, UTF-8-Encoding-Of( StringToSign ) ) ) |
|
10. Autentique a assinatura. |
Verifique se o valor de Signature no cabeçalho de autorização é o mesmo que o valor de Signature calculado pelo servidor. Se os dois valores forem os mesmos, a verificação de assinatura é sucedida. Se os dois valores forem diferentes, a verificação da assinatura falhará. |