onedrive 无管理员账户如何调用 api

in 三言两语 with 0 comment

所有的 onedrive 账户中,无管理员类型的 OneDrive 是最安全的,但是另外一方面,无管理员也不能调用 graph api,使用起来也不太方便。

除了这类原本就没有管理员账户的,还有一种是管理员为了防止滥用,特地关闭 onedrive api 的。无论哪一种,二者都不能使用 graph api,但是,他们都是可以调用 sharepoint api。

基本原理

利用 onedrive 分享可以获得一个免登录的分享链接,点击此链接会获得一个 cookie,利用此 cookie 可以获取 sharepoint 的 api_url 和 access_token。然后就可以调用了 sharepoint 的 api 了。

获取分享链接

2738699289.png

参考此篇 https://www.onesrc.cn/p/onedrive-for-onepoint-configuration.html

eg:https://lovelearn-my.sharepoint.com/:f:/g/personal/admin_share_onesrc_cc/Es6CMetI4fJCr4GqWZ3uvA0BEnzJxxb4CU-iQr04VYomLQ?e=C9K35U

获取 cookie 和 access_token

注:下文出现的 lovelearn-my.sharepoint.comadmin_share_onesrc_cc 需要根据自己的实际情况进行替换。

通过 shareurl 获取 cookie:

GET https://lovelearn-my.sharepoint.com/:f:/g/personal/admin_share_onesrc_cc/Es6CMetI4fJCr4GqWZ3uvA0BEnzJxxb4CU-iQr04VYomLQ?e=C9K35U

响应头中含有 cookie 信息,提取出来即可。

Set-Cookie: FedAuth=xxx; path=/; secure; HttpOnly

再利用 cookie,向特定链接发送 post 请求。

POST https://lovelearn-my.sharepoint.com/personal/admin_share_onesrc_cc/_api/web/GetListUsingPath(DecodedUrl=@a1)/RenderListDataAsStream?@a1='%2Fpersonal%admin_share_onesrc_cc%2FDocuments'&RootFolder=%2Fpersonal%admin_share_onesrc_cc%2FDocuments%2F&TryNewExperienceSingle=TRUE
Accept: application/json;odata=verbose
Content-Type: application/json;odata=verbose
origin: https://lovelearn-my.sharepoint.com
Cookie: FedAuth=xxx; path=/; SameSite=None; secure; HttpOnly

{"parameters":{"__metadata":{"type":"SP.RenderListDataParameters"},"RenderOptions":136967,"AllowMultipleValueFilterForTaxonomyFields":true,"AddRequiredFields":true}}

响应数据为 json,在响应里面ListSchema['.driveAccessToken']ListSchema['.driveUrl'],这两个就是 我们需要的 access_token 和 api_url 。

如何使用

传统的 graph api 接口不变,我们在使用时只需将 api_url 替换为上面获得的 driveUrl 即可,用 driveAccessToken 替代 http header 中的 Authorization 部分即可。
同时,我们的 shareurl 和 cookie 就相当于是 refresh token,可以用它来获得 access_token。

GET ${api_url}/root/children
Accept: application/json, text/plain, */*
Authorization: Bearer ${access_token}

兼容性

office官网文档 有说明 https://graph.microsoft.com/v1.0/ 和 https://{tenant-name}.sharepoint.com/_api/v2.0/sites 是等价的,原有的 graph api 在这里都能使用,所以基本不同担心兼容性啥的。

有一点非常重要的区别是下载链接不再是用@microsoft.graph.downloadUrl 而是换成了 @content.downloadUrl

其他的像新建文件夹、上传文件、删除文件、移动文件等都可以正常使用。

onepoint 已经实现了这些,有兴趣的可以自行体验。

上一篇: 分享一下我获得 npm onepoint 包的过程
下一篇: 没有了
Responses