星期二, 5月 24, 2011

無名 API 中的 Base64 上傳功能...

前幾天去無名 API 說明會,技術面中其中一個比較「有趣」的功能是「Base64 上傳」,在「無名小站 API 文件 - Version 1.2」這邊可以看到 API 文件關於 Base64 的部份。

剛好今天寫 code 的時候回去重新讀 OAuth Core 1.0a,把之前一堆環節串起來,才知道為什麼無名會設計 Base64 上傳...

OAuth Core 1.0a 內提到有三種方式可以傳遞 OAuth Protocol Parameter,而且是有優先順序的,從最優先開始分別是:
  • In the HTTP Authorization header as defined in OAuth HTTP Authorization Scheme.
  • As the HTTP POST request body with a content-type of application/x-www-form-urlencoded.
  • Added to the URLs in the query part (as defined by [RFC3986] section 3).
其中第一種方式沒辦法傳 extra parameter,第二種方式在上傳檔案時會變成 multipart。於是,上傳時要用第三種方式,把所有 parameter (OAuth Protocol 與 Extra) 在簽完後塞到 query string 裡面,而檔案用 POST (multipart) 送出...

由於檔案上傳的部份沒簽到,所以可以在傳輸過程中間被換掉 (整個 request 看起來仍然合法),所以一般會加上一個 extra parameter 傳 POST 資料的 Secure Hash。

但之前 Manic 就跟我抱怨 PHP 上面的 OAuth Library 都遺忘了檔案上傳這塊,他得自己建立 POST body 丟出去 XDDD

於是我就瞬間理解為什麼要用 Base64 上傳了... XD

PS:這是一種可能性,也有可能是 Y! policy 覺得要用 OAuth 直接簽進去才安全,這只有當初定 API spec 的人才知道了...

沒有留言: