Todos os produtos
Search
Central de documentação

Drive and Photo Service:Acesso por chamada de operações de API baseadas em AccessKey

Última atualização: Jun 28, 2026

Nota

A API do Photo and Drive Service (PDS) oferece suporte a dois modos de autenticação. Além da autenticação baseada em tokens de acesso, a API do PDS também permite autenticação por pares de AccessKey. Assine uma solicitação de API com um par de AccessKey e envie a solicitação assinada para chamar uma operação da API.

1. Exemplo de solicitação para chamar uma operação de API com um par de AccessKey

Chame todas as operações de API nos endpoints listados abaixo enviando solicitações assinadas com pares de AccessKey.

Endpoint

Descrição

https://${domainID}.api.aliyunpds.com

Endpoint para operações de API relacionadas a recursos, autorização e autenticação.

Exemplo de solicitação:

POST /v2/drive/list

Host: ${domainID}.api.aliyunpds.com
Authorization: acs ${ACCESS_KEY_ID}:${SIGNATURE}
Content-Type: application/json; charset=UTF-8

{
  "owner": "xxxx"
}

2. Assine uma solicitação com um par de AccessKey

Adicione o cabeçalho Authorization à solicitação HTTP para incluir uma assinatura. Essa assinatura indica que a solicitação está autorizada.

2,1 Método de cálculo da assinatura

O exemplo a seguir utiliza o estilo de solicitação ROA (Resource-Oriented Architecture) do Alibaba Cloud SDK. Certifique-se de que o Alibaba Cloud SDK esteja acessível.

Authorization = "acs " + AccessKeyId + ":" + Signature
Signature = base64(hmac-sha1(AccessKeySecret,
            VERB + "\n"
            + Accept + "\n"
            + Content-MD5 + "\n"
            + Content-Type + "\n"
            + Date + "\n"
            + CanonicalizedHeaders
            + CanonicalizedResource))
  • AccessKeySecret: segredo do AccessKey usado para assinar a solicitação.

  • VERB: método da solicitação HTTP. Defina o valor como POST.

  • \n: caractere de nova linha.

  • Accept: opcional. Se especificar este cabeçalho, defina o valor como application/json.

  • Content-MD5: hash MD5 do conteúdo da solicitação. Especifique este cabeçalho apenas se o corpo da solicitação não estiver vazio. Calcule o hash MD5 do conteúdo da solicitação (excluindo os cabeçalhos) para obter um número de 128 bits. Codifique esse número em Base64 para gerar o valor deste cabeçalho. Use-o para verificar se o conteúdo recebido é idêntico ao enviado. Exemplo: eB5eJF1ptWaXm4bijSPyxw==. Para mais informações, consulte Content-MD5 na RFC 2616.

  • Content-Type: opcional. Especifica o tipo de conteúdo da solicitação. Exemplo: application/octet-stream.

  • Date: obrigatório. Indica o horário de envio da solicitação no formato GMT (Greenwich Mean Time). Exemplo: Sun, 22 Nov 2015 08:16:38 GMT.

  • CanonicalizedHeaders: cabeçalhos HTTP com o prefixo x-acs-, organizados em ordem alfabética.

  • CanonicalizedResource: recursos do PDS que você deseja acessar. O cabeçalho Date e a string CanonicalizedResource são obrigatórios. Se a diferença entre o horário especificado no cabeçalho Date da solicitação e o horário do servidor PDS no recebimento for superior a 15 minutos, o PDS rejeitará a solicitação e retornará o código de status HTTP 403.

2,2 Como criar uma string CanonicalizedHeaders

A string CanonicalizedHeaders consiste em todos os cabeçalhos HTTP com o prefixo x-acs-. Para criar essa string, execute as etapas a seguir:

  1. Converta os nomes de todos os cabeçalhos HTTP com prefixo x-acs- para letras minúsculas. Por exemplo, converta X-ACS-Meta-Name: TaoBao em x-acs-meta-name: TaoBao.

  2. Se a solicitação usar um par de AccessKey fornecido pelo Security Token Service (STS), adicione o valor de security-token à string CanonicalizedHeaders no formato x-acs-security-token:security-token.

  3. Ordene alfabeticamente todos os cabeçalhos HTTP obtidos na etapa anterior.

  4. Remova todos os espaços antes e depois do delimitador entre cada cabeçalho e seu valor. Por exemplo, converta x-acs-meta-name: TaoBao em x-acs-meta-name:TaoBao.

  5. Separe cada par de cabeçalho e valor com o delimitador \n para obter a string CanonicalizedHeaders.

Nota

Se a solicitação não contiver cabeçalhos HTTP com o prefixo x-acs-, deixe a string CanonicalizedHeaders vazia. Nesse caso, não adicione o delimitador \n ao final da string vazia. Se a solicitação contiver um ou mais cabeçalhos com esse prefixo, adicione obrigatoriamente o delimitador \n ao final da string CanonicalizedHeaders obtida. Exemplos: x-acs-meta-a\n e x-acs-meta-a:a\nx-acs-meta-b:b\nx-acs-meta-c:c\n.

2,3 Como criar uma string CanonicalizedResource

A string CanonicalizedResource especifica o recurso do PDS que você deseja acessar. Para criar essa string, execute as etapas a seguir:

  1. Defina a string CanonicalizedResource como uma string vazia "".

  2. Adicione o recurso do PDS que você deseja acessar à string vazia. Exemplo: /v2/domain/list.

2,4 Regras de cálculo da assinatura

  • A string a ser assinada deve estar codificada em UTF-8. Use a string codificada em UTF-8 e o AccessKeySecret para calcular a assinatura.

  • Use o método HMAC-SHA1 definido na RFC 2104 para calcular a assinatura. Nesse método, o AccessKeySecret funciona como chave.

  • Os cabeçalhos Accept, Content-Type e Content-MD5 são opcionais. Se estiverem vazios na solicitação, substitua-os por caracteres de nova linha (\n) ao calcular a assinatura.

  • Entre os cabeçalhos HTTP não padrão, apenas aqueles com o prefixo x-acs- devem compor a string a ser assinada. Os demais cabeçalhos não padrão são ignorados.

  • Os cabeçalhos com prefixo x-acs- na string a ser assinada devem obedecer às seguintes convenções:

  • Nomes dos cabeçalhos em letras minúsculas.

  • Cabeçalhos ordenados alfabeticamente.

  • Sem espaços antes ou depois dos dois pontos (:) que separam o nome do cabeçalho de seu valor.

  • Cada cabeçalho deve ser seguido por uma nova linha (\n). Se a solicitação não contiver cabeçalhos com prefixo x-acs-, defina a string CanonicalizedHeaders como vazia, sem o delimitador \n final.

2,5 Solução de problemas

  • Se especificar o cabeçalho Accept, verifique se o valor é application/json. Caso contrário, o sistema retornará o erro 400 Bad Request com o código InvalidHeader.

  • Verifique se o tamanho do corpo não excede 4 MB. Se exceder esse limite, o sistema retornará o erro 400 Bad Request com o código InvaliField.

  • Se o formato do cabeçalho Authorization for inválido, o sistema retornará o erro 400 Bad Request com o código InvaliField.

  • Se o AccessKey ID começar com STS, verifique se o cabeçalho x-acs-security-token está definido. Caso contrário, o sistema retornará o erro 403 Forbidden com o código InvalidHeader.

  • Se o AccessKey ID não existir ou estiver no estado Disabled, o sistema retornará o erro 403 Forbidden com o código InvalidParameter.

  • Se o AccessKey ID estiver no estado Enabled, mas o PDS detectar que a assinatura da solicitação é inválida, o sistema retornará o erro 403 Forbidden com o código SignatureDoesNotMatch. A string usada para verificar a assinatura também será retornada na response. Verifique se a string de assinatura está correta com base nessa resposta.

3. Controle de permissões

O servidor de API do PDS usa o Resource Access Management (RAM) da Alibaba Cloud para verificar permissões. Configure políticas de permissão para o par de AccessKey do usuário RAM no RAM console.

A tabela a seguir descreve a ação e o recurso verificados em cada operação da API.

Operação

Ação

Recurso

ListStores(/v2/domain/liststores)

pds:ListStores

acs:pds:$regionid:$accountid:domain/$domainid/store/*

ListStoreFiles(/v2/storefile/list)

pds:ListStoreFiles

acs:pds:$regionid:$accountid:domain/$domainid

CreateDrive(/v2/drive/create)

pds:CreateDrive

acs:pds:$regionid:$accountid:domain/$domainid/drive/*

ListDrives(/v2/drive/list)

pds:ListDrives

acs:pds:$regionid:$accountid:domain/$domainid/drive/*

GetDrive(/v2/drive/get)

pds:GetDrive

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

UpdateDrive(/v2/drive/update)

pds:UpdateDrive

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

DeleteDrive(/v2/drive/delete)

pds:DeleteDrive

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

ListMyDrives(/v2/drive/list_my_drives)

pds:ListMyDrives

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

ListMyShares(/v2/drive/list_my_shares)

pds:ListMyShares

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

CreateUser(/v2/user/create)

pds:CreateUser

acs:pds:$regionid:$accountid:domain/$domainid/user/*

GetUser(/v2/user/get)

pds:GetUser

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

ListUsers(/v2/user/list)

pds:ListUser

acs:pds:$regionid:$accountid:domain/$domainid/user/*

UpdateUser(/v2/user/update)

pds:UpdateUser

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

DeleteUser(/v2/user/delete)

pds:DeleteUser

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

SearchUser(/v2/user/search)

pds:SearchUser

acs:pds:$regionid:$accountid:domain/$domainid/user/*

GetUserAccessToken(/v2/user/get_access_token)

pds:GetUserAccessToken

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

CreateShare(/v2/share/create)

pds:CreateShare

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

GetShare(/v2/share/get)

pds:GetShare

acs:pds:$regionid:$accountid:domain/$domainid/share/$shareid

ListShares(/v2/share/list)

pds:ListShares

acs:pds:$regionid:$accountid:domain/$domainid/share/*

UpdateShare(/v2/share/update)

pds:UpdateShare

acs:pds:$regionid:$accountid:domain/$domainid/share/$shareid

CreateFile(/v2/file/create)

pds:CreateFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

CreateFileWithSignature(/v2/file/create_with_signature)

pds:CreateFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid ou acs:pds:$regionid:$accountid:domain/$domainid/share/$shareid

ListFiles(/v2/file/list)

pds:ListFiles

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

CompleteFile(/v2/file/complete)

pds:CreateFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

CompleteFileWithStoreInfo(/v2/file/complete_with_store_info)

pds:CreateFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

GetFileSignature(/v2/file/get_signature)

pds:GetFileSignature

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

GetFileUploadUrl(/v2/file/get_upload_url)

pds:CreateFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

GetFileDownloadUrl(/v2/file/get_download_url)

pds:GetFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

DeleteFile(/v2/file/delete)

pds:DeleteFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

CopyFile(/v2/file/copy)

pds:CopyFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

MoveFile(/v2/file/move)

pds:MoveFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

UpdateFile(/v2/file/update)

pds:UpdateFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

GetFile(/v2/file/get)

pds:GetFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

DownloadFile(/v2/file/get)

pds:GetFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

BatchDeleteFile(/v2/file/batch_delete)

pds:DeleteFile

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

GetAsyncTask(/v2/async_task/get)

pds:GetAsyncTask

acs:pds:$regionid:$accountid:domain/$domainid/user/$userid

ListImageTags(/v2/image/list_tags)

pds:ListImageTags

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

ListImageFaceGroups(/v2/image/list_facegroups)

pds:ListImageFaceGroups

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

ListFaceGroupImages(/v2/image/list_facegroup_images)

pds:ListFaceGroupImages

acs:pds:$regionid:$accountid:domain/$domainid/drive/$driveid

Batch(/v2/batch)

pds:Batch

acs:pds:$regionid:$accountid:*