STS介紹
OSS可以通過阿里雲STS服務,臨時進行授權訪問。阿里雲STS(Security Token Service)是為雲端運算用戶提供臨時存取權杖的Web服務。通過STS,您可以為第三方應用或聯邦用戶(用戶身份由您自己管理)頒發一個自訂時效和許可權的訪問憑證。第三方應用或聯邦用戶可以使用該訪問憑證直接調用阿里雲產品API,或者使用阿里雲產品提供的SDK來訪問雲產品API。
-
您不需要透露您的長期密鑰(AccessKey)給第三方應用,只需要生成一個存取權杖並將令牌交給第三方應用即可。
-
這個令牌的存取權限及有效期間限都可以由您自訂。
-
您不需要關心許可權撤銷問題,存取權杖過期後就自動失效。
以app應用為例,互動流程如下圖:
方案的詳細描述如下:
- App用戶登入。
客戶自己管理App用戶,自訂身份管理系統,也可以使用外部Web帳號或OpenID。對於每個有效App用戶來說,AppServer是可以確切地定義出每個App用戶的最小存取權限。
- AppServer請求STS服務獲取一個安全性權杖(SecurityToken)。
在調用STS之前,AppServer需要確定App用戶的最小存取權限(用Policy文法描述)以及授權的過期時間。通過調用STS的AssumeRole(扮演角色)介面來獲取安全性權杖。
- STS返回給AppServer一個有效訪問憑證,包括一個安全性權杖(SecurityToken)、臨時存取金鑰(AccessKeyId、AccessKeySecret)以及過期時間。
- AppServer將訪問憑證返回給ClientApp。
ClientApp可以緩存這個憑證。當憑證失效時,ClientApp需要向AppServer申請新的有效訪問憑證。比如,訪問憑證有效期間為1小時,那麼ClientApp可以每30分鐘向AppServer請求更新訪問憑證。
- ClientApp使用本機快取的訪問憑證去請求Alibaba Cloud Service API。雲端服務會感知STS訪問憑證,並會依賴STS服務來驗證訪問憑證,並正確響應用戶請求。
STS安全性權杖詳情,請參考RAM使用指南中的角色管理。
調用STS服務介面AssumeRole來獲取有效訪問憑證即可。也可以直接使用STS SDK來調用該方法
使用STS憑證建構簽章請求
用戶的客戶端拿到STS臨時憑證後,通過其中安全性權杖(SecurityToken)以及臨時存取金鑰(AccessKeyId、AccessKeySecret)構建簽名。授權訪問簽名的構建方式與直接使用根帳號的AccessKey在Header中包含簽名基本一致,關鍵注意兩點:
-
用戶使用的簽名密鑰為STS提供的臨時存取金鑰(AccessKeyId、AccessKeySecret)。
-
用戶需要將安全性權杖(SecurityToken)攜帶在請求header中或者以請求參數的形式放入URI中。這兩種形式只能選擇其一,如果都選擇,OSS會返回InvalidArgument錯誤。
-
在header中包含頭部
x-oss-security-token:SecurityToken
。計算簽名CanonicalizedOSSHeaders時,將x-oss-security-token計算在內。 -
在URL中攜帶參數
security-token=SecurityToken
。計算簽名CanonicalizedResource時 ,將security-token當做一個sub-resource計算在內。
-