title

最近尝试了下azure cli配置私有api发现新版本已经不再支持密钥对形式设置请求自定义credential的年限了,因此记录下流程备忘。

一、注册Azure应用,修改私有api的credential有效年限

方法一、Azure cli配置application credentials

手动登录Azure DD后台https://portal.azure.com/
注册新的应用,选择第三项:

  • 任何组织目录(任何 Azure AD 目录 - 多租户)中的帐户和个人 Microsoft 帐户(例如,Skype、Xbox)

并选择重定向 URI跳转平台为web,地址为http://localhost:53682/即可,新的应用注册成功,我们需要通过命令行来设定超过2年有效期的secrect密钥对,官方默认只支持证书形式的授权可以定义超过2年有效期,原来的密钥对最长只支持2年。

https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-windows?tabs=azure-cli
点此查询下载最新的azure-cli工具并进行安装
如果最新版本无法使用对应的功能,则在此页面修改下载指定版本:
https://azcliprod.blob.core.windows.net/msi/azure-cli-.msi
比如需要下载v2.29.1:
https://azcliprod.blob.core.windows.net/msi/azure-cli-2.29.1.msi
安装完毕后就可以使用cmd或者powershell进行az指令操作了

输入az login --allow-no-subscriptions登录,自动跳转到azure登录页面,选择你的管理员或者需要设置api的office365账号登录即可
参数:
https://docs.microsoft.com/en-US/cli/azure/ad/sp/credential?view=azure-cli-latest#az_ad_sp_credential_reset
因为新的版本更新舍弃了这种不安全的密钥对生成请求,所以可能需要旧版本的azure cli,这里不做演示了,修改指令可以参考:

az ad sp credential reset --name {name of your AD app} --end-date 2099-12-31 --credential-description DescriptionHere
az ad sp credential reset --name {name of your AD app} --password {whatever password you want to keep} --end-date 2099-12-31--credential-description secrect
az ad sp credential reset --name zzzzzzzz-xxxxxxxx-yyyyyyyyy --year 99 --credential-description secrect

而使用证书进行配置参考如下:

az ad sp credential reset --name myapp --cert "@~/cert.pem" --append

方法二、使用graph-explorer进行Post请求配置

https://developer.microsoft.com/zh-cn/graph/graph-explorer
使用方法和需要的权限说明参看:
https://docs.microsoft.com/en-us/graph/api/application-addpassword?view=graph-rest-beta&tabs=http

Permission typePermissions (from least to most privileged)
Delegated(work or school account)Application.ReadWrite.All,Directory.ReadWrite.All, Directory.AccessAsUser.All
Delegated(personal Microsoft account)Application.ReadWrite.All
ApplicationApplication.ReadWrite.OwnedBy,Application.ReadWrite.All, Directory.ReadWrite.All

这里用的office365账号,所以在修改权限-预览版项目记得添加Application.ReadWrite.All,Directory.ReadWrite.All, Directory.AccessAsUser.All三项权限,

再添加post请求网址为:
https://graph.microsoft.com/v1.0/applications/你的应用对应的object id(对象ID)/addPassword

内容参考如下:

{
    "passwordCredential": {
        "displayName": "任意描述",
        "endDateTime": "2122-01-27T00:00:00Z"
    }
}

Post

提交获得回应后记下secretText的值,只在此刻出现一次,以后无法获得。新版本的认证用的是client ID +这个secretText 值,所以务必保存好。
如果是以前创建的applications目前似乎还在沿用client id +client secret 组合。
保存完毕,返回Azure应用详情页面选择证书和密钥栏目,刷新应该就有新的密钥对信息了,保存好你的secretText值,这个和之前的客户端client ID是用来rclone授权访问所需的,之后添加需要的权限信息:Microsoft Graph,委托 权限,具体权限如下:
Files.Read、Files.ReadWrite、Files.Read.All、Files.ReadWrite.All、offline_access、User.Read
permission
如果需要读取/写入SharePoint网站内容还应添加Sites.Read.All或者Sites.ReadWrite.All

最后转移所有者为对应子号用户即可完毕。
拓展阅读:
https://tip.rclone.org/onedrive/#getting-your-own-client-id-and-key

二、多账号OneDrive快速配置授权

如果你有多个子号需要查询OneDrive driveUrl,那么用管理员管理用户栏选择对应用户后查看OneDrive项目,点击创建新的访问地址
get onedrive link
获得OneDrive地址授权后直接打开,右键查看网页源代码,搜索driveUrl,对应的ID保存可以方便后面快速配置rclone config文件。快捷访问地址:
view-source:https://{yoururl}-my.sharepoint.com/personal/{your_users_link}/_layouts/15/onedrive.aspx
授权所有需要的子号的应用能访问你的OneDrive则很简单,去后台管理,组(Group),创建一个新的office 365组,将需要的子号全部拉入成员即可。

最后对此子号的OneDrive页面点击右上角齿轮设置,对网站集管理员进行配置,添加用户组为对应OneDrive管理员即可授权所有组员和他们对应的应用api都能访问你的OneDrive文件了
admin add group
参考地址形如:
https://{yoururl}-my.sharepoint.com/personal/{your_users_link}/_layouts/15/mngsiteadmin.aspx

三、rclone多账号api快速配置和灵活切换

  • 新建rclone config文件如下:
[OnedriveMusic]
type = onedrive
client_id = e1b2097d-xxxx-yyyy-zzzz-7e4d1274a540
client_secret = LRq3GOzzzzxxxxxxxxyyyyyypwHJvt_GC
token = {"access_token":"xxxxx","token_type":"Bearer","refresh_token":"yyyyy","expiry":"2022-01-25T18:47:26.387649+08:00"}
drive_id = b!iBlBFe-xxxxxxxxxxxxxxxxxxxxxxxxxxx
drive_type = business
  • 刷新token直接使用此指令:
rclone authorize "onedrive" "your client ID" "client secret"

将新的token更替上述token=后内容即可
这样你可以快速配置多个子号的应用api访问指定单个OneDrive,只需要将drive_id=项目修改即可,一台vps跑一个应用的api,从而突破单api下载上传限速。

  • 获取需要传递的任务文件清单:
rclone lsf GdriveA: > /root/.config/rclone/task.txt
gclone lsf GdriveSA:{xxxxxxxxx} > E:\software\rclone\task_list.txt --max-depth 10
  • 统计需要转移的文件总大小:
rclone size GdriveA: -v --stats 15s --transfers 4  --include-from "/root/.config/rclone/list.txt"
gclone ncdu GdriveSA:{1xxxdddafafaddo}

演示的两条指令分别为指定列表总文件大小指令,以及ncdu指令统计适合庞大文件的google 团队盘统计文件,不会出现rclone size指令那种遗落文件的问题。
自己按需调整。
然后手动拆分,用xls还是记事本都行,快捷键 ctl+shift+Home是从光标处往上选中到文首所有内容。

  • 最后,多任务分发:
    OneDrive 自身的一些限制问题,请先尝试小型任务,略有所得后再进行大肆搬迁.

参考示例:

gclone copy GdriveSA:{xxxxxxxxxxx}/DL音声合集 OnedriveMusicAPI1:/同人音声/DL音声合集 -q --log-file=C:\Software\rclone-v1.56.2-windows-amd64\task\error.txt --stats 15s --transfers 6  --cache-chunk-size 20M --ignore-checksum --ignore-size --drive-acknowledge-abuse  --bwlimit 40M --max-size 250G --retries 3  --include-from "C:\Software\rclone-v1.56.2-windows-amd64\task\DL音声合集1.txt" 
gclone copy GdriveSA:{xxxxxxxxxxx}/DL音声合集 OnedriveMusicAPI2:/同人音声/DL音声合集 -q --log-file=C:\Software\rclone-v1.56.2-windows-amd64\task\error.txt --stats 15s --transfers 6  --cache-chunk-size 20M --ignore-checksum --ignore-size --drive-acknowledge-abuse  --bwlimit 40M --max-size 250G --retries 3  --include-from "C:\Software\rclone-v1.56.2-windows-amd64\task\DL音声合集2.txt" 
gclone copy GdriveSA:{xxxxxxxxxxx}/DL音声合集 OnedriveMusicAPI3:/同人音声/DL音声合集 -q --log-file=C:\Software\rclone-v1.56.2-windows-amd64\task\error.txt --stats 15s --transfers 6  --cache-chunk-size 20M --ignore-checksum --ignore-size --drive-acknowledge-abuse  --bwlimit 40M --max-size 250G --retries 3  --include-from "C:\Software\rclone-v1.56.2-windows-amd64\task\DL音声合集3.txt"

如果你想了解微软的Onedrive隐藏限额经验简介,不妨参看:


如果你想查询OneDrive拷贝细节配置和常见错误解决方法,可以看看:

如果你想更新你的emby库,苦于提取获得新增文件清单同步到OneDrive,可以参考:

如果你还不太了解rlcone或者相对rclone系列各种工具有着深入了解研究想法,可以看看我踩过的坑,多少会有些帮助:

最后,滥用和松鼠党的归宿终究逃不过这位老哥的结局,逃得了Google drive,也顶不住微软的制裁的,各位且用且珍惜:
https://answers.microsoft.com/zh-hans/msoffice/forum/all/%E6%88%91%E6%98%AF%E5%BC%80%E5%8F%91%E4%BA%BA/8f891794-cf10-4a34-b38d-1b8776fe4235

另外一些修改方式参考大佬们的分享:
修改应用密钥有效期之 Chrome 扩展 TamperDev 篇
修改应用密钥有效期之 Fiddler 篇
修改应用密钥有效期之 Charles 篇
修改应用密钥有效期之 azure-cli 篇
修改应用密钥有效期之 Graph Explorer 篇

Last modification:February 3, 2022
If you think my article is useful to you, please feel free to appreciate