rclone 無管理員 Onedrive 使用

語言: CN / TW / HK

移植工程:http://github.com/nickfox-taterli/rclone

編譯好的版本: Linux(64位) / Windows(64位) 

特別警吿:SharePoint傳輸效率低於Graph API,如無必要,儘量使用標準API,並且不支持世紀互聯.

如何進行無管理員OneDrive綁定,首先無管理員OneDrive是不可以進行API授權的,但是依然有辦法獲取access_token,即可以進行對接.

無管理Office特徵,登錄Office子號時會顯示管理圖標的,都是無管理狀態.

進入OneDrive頁面,打開F12調試工具,搜索關鍵字RenderListData,可以找到driveAccessToken和driveUrl兩項,這是關鍵.

由於沒有API,配置文件需要自己寫,比如我提取到的信息如下.

.driveAccessToken: "access_token=eyJ0........D0"
.driveUrl: "http://alumnibentley-my.sharepoint.com/_api/v2.0/drives/b!....-...."

我可以編輯配置文件~/.config/rclone/rclone.conf新增一個字段,比如我新增一個alumnibentley的字段.

[alumnibentley]
type = onedrive
token = {"access_token":"eyJ0........D0","token_type":"Bearer","refresh_token":"","expiry":"2020-06-30T15:22:06.648584+08:00"}
drive_id = b!....-....
noadmin = true
tenant_url = http://alumnibentley-my.sharepoint.com/_api
drive_type = business

注意expiry時間並不準確,你可以隨便寫個未來的時間,因為過期時間實際上並不確定,一旦過期,只能到網頁上重新獲取,然後就可以玩了~

重點!權限不夠怎麼辦?

這裏是請求token的權限,如果不夠,我們可以自己寫POST請求,也是一樣的,最高可以獲取到0x17FFFF(即1572863),每一位(Bit)代表一個一個權限.

參考代碼(Python)

import requests

url = "http://alumnibentley-my.sharepoint.com/personal/admin_alumni_bentley_edu/_api/web/GetListUsingPath([email protected])/[email protected]='/personal/admin_alumni_bentley_edu/Documents'&TryNewExperienceSingle=TRUE"

payload = '''{
    "parameters": {
        "__metadata": {
            "type": "SP.RenderListDataParameters"
        },
        "RenderOptions": 1572863,
        "AllowMultipleValueFilterForTaxonomyFields": true,
        "AddRequiredFields": true
    }
}'''
headers = {
  'Accept': 'application/json;odata=verbose',
  'Content-Type': 'application/json;odata=verbose',
  'Cookie': 'rtFa=[RTFA]; FedAuth=[FEDAUTH]'
}

response = requests.post(url, headers=headers, data = payload)

print(response.text)

測試:

目前測試主流上傳下載創建目錄同步功能是OK的,另外,世紀互聯不會產出access_token,只有變化較為多的FedAuth和rtFa,有需要的話,用這兩個參數也可以進行API操作.