釋放 AI 的強大力量

100 萬免費代幣

88% 價格優惠

NaNDayNaN:NaN:NaN
立即啟用
本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

AccessKey調介面接入

更新時間:2024-07-06 01:53
說明

PDS 提供的 API,有兩套鑒權體系。除了可以使用 AccessToken 訪問之外,還可以使用阿里雲 AccessKey 簽名訪問。

1. AK 調用方式舉例

使用 AccessKey 簽名的方式,可以調用以下 Endpoint 的所有介面。

Endpoint

描述

Endpoint

描述

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

資源、認證授權 API

舉例:

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. AK 簽名說明

使用者可以在HTTP請求中增加 Authorization 的Header來包含簽名(Signature)資訊,表明這個訊息已被授權。

2.1 計算方法

這裡參考了 aliyun sdk 的 RoaRequest,確保 aliyun sdk可以調通

Authorization = "acs " + AccessKeyId + ":" + Signature
Signature = base64(hmac-sha1(AccessKeySecret,
            VERB + "\n"
            + Accept + "\n"
            + Content-MD5 + "\n"
            + Content-Type + "\n"
            + Date + "\n"
            + CanonicalizedHeaders
            + CanonicalizedResource))
  • AccessKeySecret表示簽名所需的密鑰。

  • VERB表示HTTP 請求的Method,當前只支援 POST 。

  • \n表示分行符號。

  • Accept可以不設定,如果設定,當前只支援:application/json

  • Content-MD5如果body為空白,可以不設定。否則必須設定,表示請求內容資料的MD5值,對訊息內容(不包括頭部)計算MD5值獲得128位元位元字,對該數字進行base64編碼而得到。該要求標頭可用於訊息合法性的檢查(訊息內容是否與發送時一致),如 eB5eJF1ptWaXm4bijSPyxw==。詳情請參見 RFC2616 Content-MD5

  • Content-Type可以為空白,表示請求內容的類型,如 application/octet-stream

  • Date 必須設定,表示此次操作的時間,且必須為GMT格式,如Sun, 22 Nov 2015 08:16:38 GMT

  • CanonicalizedHeaders表示以 x-acs-為首碼的 HTTP Header的字典序排列。

  • CanonicalizedResource表示使用者想要訪問的pds資源。其中,Date和 CanonicalizedResource不可為空;如果請求中的Date時間和PDS伺服器的時間差15分鐘以上,PDS伺服器將拒絕該服務,並返回HTTP 403錯誤。

2.2 構建CanonicalizedHeaders的方法

所有以 x-acs-為首碼的HTTP Header被稱為CanonicalizedHeaders。它的構建方法如下:

  1. 將所有以 x-acs-為首碼的HTTP要求標頭的名字轉換成小寫 。如X-ACS-Meta-Name: TaoBao轉換成x-acs-meta-name: TaoBao

  2. 如果請求是以STS獲得的AccessKeyIdAccessKeySecret發送時,還需要將獲得的security-token值以 x-acs-security-token:security-token的形式加入到簽名字串中。

  3. 將上一步得到的所有HTTP要求標頭按照名字的字典序進行升序排列。

  4. 刪除要求標頭和內容之間分隔字元兩端出現的任何空格。如x-acs-meta-name: TaoBao轉換成:x-acs-meta-name:TaoBao

  5. 將每一個頭和內容用 \n分隔字元分隔拼成最後的CanonicalizedOSSHeaders

說明

CanonicalizedHeaders可以為空白,無需添加最後的 \n。 如果只有一個,則如 x-acs-meta-a\n,注意最後的\n。 如果有多個,則如 x-acs-meta-a:a\nx-acs-meta-b:b\nx-acs-meta-c:c\n,注意最後的\n。

2.3 構建CanonicalizedResource的方法

使用者發送請求中想訪問的PDS介面被稱為CanonicalizedResource。它的構建方法如下:

  1. CanonicalizedResource置成Null 字元串 “”。

  2. 放入要訪問的PDS介面,如: /v2/domain/list

2.4 計算簽名頭規則

  • 簽名的字串必須為 UTF-8 格式。含有中文字元的簽名字串必須先進行 UTF-8 編碼,再與 AccessKeySecret計算最終簽名。

  • 簽名的方法用RFC 2104中定義的HMAC-SHA1方法,其中Key為 AccessKeySecret

  • AcceptContent-TypeContent-MD5在請求中不是必須的,但是如果請求需要簽名驗證,空值的話以分行符號 \n代替。

  • 在所有非HTTP標準定義的header中,只有以 x-acs-開頭的header,需要加入簽名字串;其他非HTTP標準header將被忽略。

  • x-acs-開頭的header在簽名驗證前需要符合以下規範:

  • header的名字需要變成小寫。

  • header按字典序自小到大排序。

  • 分割header name和value的冒號前後不能有空格。

  • 每個Header之後都有一個分行符號\n,如果沒有Header,CanonicalizedHeaders就設定為空白。

2.5 細節分析

  • 如果設定了 Accept,則檢查是否為 application/json,否則返回400 Bad Request。錯誤碼:InvalidHeader

  • 檢查Body Length是否超過 4M,如果超過,返回400 Bad Request。錯誤碼為:InvaliField

  • 若使用者要求標頭中Authorization值的格式不對,返回400 Bad Request。錯誤碼:InvaliField

  • 如果ak為STS開頭,則檢查是否設定 x-acs-security-token,否則返回403 Forbidden。錯誤碼為:InvalidHeader

  • 如果傳入的AccessKeyId不存在或inactive,返回403 Forbidden。錯誤碼:InvalidParameter

  • 如果AccessKeyId是active的,但PDS判斷使用者的請求發生簽名錯誤,則返回403 Forbidden。錯誤碼:SignatureDoesNotMatch;並在返回給使用者的response中告訴使用者正確的用於驗證加密的簽名字串。使用者可以根據 PDS 的response來檢查自己的簽名字串是否正確。

3. 許可權控制

API 服務端通過阿里雲RAM(存取控制服務)來校正許可權。您可以在 RAM控制台設定子帳號的 AccessKey 的權限原則。

以下是 API 鑒權參考表:

API

鑒權 Action

鑒權 Resource

API

鑒權 Action

鑒權 Resource

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/$driveidor 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:*

  • 本頁導讀 (1, M)
  • 1. AK 調用方式舉例
  • 2. AK 簽名說明
  • 3. 許可權控制
文檔反饋
phone 聯絡我們

立即和Alibaba Cloud在線服務人員進行交談,獲取您想了解的產品信息以及最新折扣。

alicare alicarealicarealicare