前言
上一篇说到申请office 365 E5的方法。但是他需要调用微软的一些api才能续订。所以我们可以在azure创建应用,来调用他的api。
这里介绍一款Rclone
的应用,它可以调用onedrive的接口。
创建 OneDrive API
获取 Client ID
进入Microsoft Azure 应用注册页面。点击新注册。
名称随意,账户类型选择最后一个,重定向 URL 填写http://localhost
。
创建成功后你会看到 Client ID(客户端 ID),复制并保存好。
获取 Client secret
点击证书和密码
,按照图中序号的顺序操作添加密码。
然后你会看到 Client secret(客户端密码),复制并保存好。
设置 API 权限
点击API 权限
,按照图示进行操作,添加Files.Read
、Files.ReadWrite
、Files.Read.All
、Files.ReadWrite.All
、offline_access
、User.Read
这些权限。
获取 token
在本地电脑上下载 rclone。
以 Windows 为例子,解压并进入rclone.exe
所在文件夹,在资源管理器地址栏输入cmd,回车就会在当前路径打开命令提示符。
替换以下命令中的Client_ID
、Client_secret
并执行。
rclone authorize "onedrive" "Client_ID" "Client_secret"
接下来会弹出浏览器,要求你登录账号进行授权。授权完后命令提示符窗口会出现以下信息:
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...
Got code
Paste the following into your remote machine --->
{"access_token":"xxxxxxxxxxxxxxxxxx","expiry":"2020-02-22T21:18:39.5036298+08:00"}
<---End paste
{"access_token":"xxxxxxxxxxxxxxxxxx","expiry":"2020-02-22T21:18:39.5036298+08:00"}
整个内容(包含括号)就是 token ,复制并保存好。
Rclone 连接 OneDrive
输入 rclone config
命令,会出现以下信息,参照下面的注释进行操作。
$ rclone config
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> n # 输入 n,新建
name> od-e5-api # 输入网盘名称,类似于标签,用于区分不同的网盘。
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / 1Fichier
\ "fichier"
2 / Alias for an existing remote
\ "alias"
3 / Amazon Drive
\ "amazon cloud drive"
4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
\ "s3"
5 / Backblaze B2
\ "b2"
6 / Box
\ "box"
7 / Cache a remote
\ "cache"
8 / Citrix Sharefile
\ "sharefile"
9 / Dropbox
\ "dropbox"
10 / Encrypt/Decrypt a remote
\ "crypt"
11 / FTP Connection
\ "ftp"
12 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
13 / Google Drive
\ "drive"
14 / Google Photos
\ "google photos"
15 / Hubic
\ "hubic"
16 / JottaCloud
\ "jottacloud"
17 / Koofr
\ "koofr"
18 / Local Disk
\ "local"
19 / Mail.ru Cloud
\ "mailru"
20 / Mega
\ "mega"
21 / Microsoft Azure Blob Storage
\ "azureblob"
22 / Microsoft OneDrive
\ "onedrive"
23 / OpenDrive
\ "opendrive"
24 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
25 / Pcloud
\ "pcloud"
26 / Put.io
\ "putio"
27 / QingCloud Object Storage
\ "qingstor"
28 / SSH/SFTP Connection
\ "sftp"
29 / Transparently chunk/split large files
\ "chunker"
30 / Union merges the contents of several remotes
\ "union"
31 / Webdav
\ "webdav"
32 / Yandex Disk
\ "yandex"
33 / http Connection
\ "http"
34 / premiumize.me
\ "premiumizeme"
Storage> 22 # 选择 Microsoft OneDrive ,截止2020年2月23日序号为 22
** See help for onedrive backend at: https://rclone.org/onedrive/ **
Microsoft App Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id> # 输入 Client Id (客户端 ID)
Microsoft App Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret> # 输入 Client Secret (客户端密码)
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n # 输入 n
Remote config
Make sure your Redirect URL is set to "http://localhost:53682/" in your custom config.
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> n # 输入 n
For this to work, you will need rclone available on a machine that has a web browser available.
Execute the following on your machine (same rclone version recommended) :
rclone authorize "onedrive" "client_id" "client_secret"
Then paste the result below:
result> {"access_token":"XXXXXXXXX","expiry":"2020-02-22T21:18:39.5036298+08:00"} # 输入 token
Choose a number from below, or type in an existing value
1 / OneDrive Personal or Business
\ "onedrive"
2 / Root Sharepoint site
\ "sharepoint"
3 / Type in driveID
\ "driveid"
4 / Type in SiteID
\ "siteid"
5 / Search a Sharepoint site
\ "search"
Your choice> 1 # # 这里问你要选择的类型,因为是使用 OneDrive ,所以输入 1
Found 1 drives, please select the one you want to use:
0: OneDrive (business) id=xxxxxxxxxxxxxx
Chose drive to use:> 0 # 检测到了网盘,这里编号是 0 ,所以输入 0
Found drive 'root' of type 'business', URL: https://p3terx-my.sharepoint.com/personal/xxxxxx/Documents
Is that okay?
y) Yes
n) No
y/n> y # 问你是否确认,如果没问题则输入 y
--------------------
[od-e5-api]
type = onedrive
client_id = xxxxxxxxxx
client_secret = xxxxxxxxxxxxxxxx
token = {"access_token":"xxxxxxxxxxxxxxxxxx","expiry":"2020-02-22T21:18:39.5036298+08:00"}
drive_id = xxxxxxxxxxxxxxxxxxxxxxxxx
drive_type = business
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y # 最后会显示网盘的配置信息并询问你是否正确,如果没问题则输入 y
Current remotes:
Name Type
==== ====
od-e5-api onedrive
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q # 输入 q 退出
最后验证一下是否能正常使用,替换以下命令中的 od-e5-api
并执行,注意最后有:
(冒号)。网盘中出现 test
文件即表示成功。
touch test && rclone move test od-e5-api:
挂载为磁盘
首先安装fuse
#Debian/Ubuntu系统
apt-get install fuse -y
#CentOS系统
yum install fuse -y
#新建本地文件夹,路径自己定,即下面的LocalFolder
mkdir /od
#挂载为磁盘,下面的DriveName、Folder、LocalFolder参数根据说明自行替换
rclone mount DriveName:Folder LocalFolder --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000
DriveName
为初始化配置填的name,Folder
为OneDrive里的文件夹,LocalFolder
为VPS上的本地文件夹。
挂载成功后,输入df -h
命令查看即可!
开机自启
先新建systemd
配置文件,适用CentOS 7
、Debian 8+
、Ubuntu 16+
。
DriveName
为Rclone
的配置名称,比如你配置rclone
的时候,Name
填的od
Folder
为网盘里的文件夹路径,如果你要挂载整个网盘,直接填/
挂载整个根目录LocalFolder
为本地服务器上的挂载文件夹,如果你需要将网盘的文件夹挂载到服务器上的/Drive
文件夹,那就填/Drive
#以下是一整条命令,先修改DriveName:Folder和LocalFolder(有三处地方)的值,再一起复制到SSH客户端运行
cat > /etc/systemd/system/rclone.service <<EOF
[Unit]
Description=Rclone
AssertPathIsDirectory=LocalFolder
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/rclone mount DriveName:Folder LocalFolder \
--umask 0000 \
--default-permissions \
--allow-non-empty \
--allow-other \
--buffer-size 32M \
--dir-cache-time 12h \
--vfs-read-chunk-size 64M \
--vfs-read-chunk-size-limit 1G
ExecStop=/bin/fusermount -u LocalFolder
Restart=on-abort
User=root
[Install]
WantedBy=default.target
EOF
修改示例:
cat > /etc/systemd/system/rclone.service <<EOF
[Unit]
Description=Rclone
AssertPathIsDirectory=/od
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/rclone mount od:/ /od \
--umask 0000 \
--default-permissions \
--allow-non-empty \
--allow-other \
--buffer-size 32M \
--dir-cache-time 12h \
--vfs-read-chunk-size 64M \
--vfs-read-chunk-size-limit 1G
ExecStop=/bin/fusermount -u /od
Restart=on-abort
User=root
[Install]
WantedBy=default.target
EOF
开始启动:
systemctl start rclone
设置开机自启:
systemctl enable rclone
其他命令:
重启:systemctl restart rclone
停止:systemctl stop rclone
状态:systemctl status rclone
至此,Rclone 已成功使用自建 API 连接到了 OneDrive 网盘。如果需要在vps上挂载,你需要在本地获取token,然后再在vps上配置rclone链接OneDrive
Windows下可视化上传下载 RcloneBrowser
windows下可选,非必须,感觉OneDrive自己的客户端都很好用了
RcloneBrowser
是基于rclone
来实现OneDrive
文件的上传下载,个人觉得微软自己的OneDrive
客户端还不错没必要用这个.但是如果为了调用API
保活,这大概是最简单的方法了
在 https://github.com/kapitainsky/RcloneBrowser/releases 下载RcloneBrowser
在 http://www.secfs.net/winfsp/download/ 下载必要插件,这个插件是挂载onedrive到某个盘符要用到的
下载好后进行安装,然后进行配置。配置 rclone.exe
的路径还有 rclone.conf
配置文件的路径。
上传文件