前几天天天收到宝塔 Onedrive 备份失败,今天来解决一下
首先第一步先看的可用容量,毕竟我这种 10 分钟备份一次的 即使是 5 TiB 的空间,不出两个月也会满,看完了,确定空间充足,于是再次尝试备份,备份失败
看了一下日志:
原来是秘钥过期了
但是我记得,我他用的并不是 手动秘钥授权 那难道是直接用了别人的应用程序!?
经过核对,这个应用程序 ID 并不是我创建的。
先不管这些,我尝试重新授权一次,尽然提示授权失败,那我大概猜到是为什么了。
众所周知,在 Azure 应用程序添加 客户端密码 时,需要选择密码的租期(如图)
但是这个选项,从 2022 年开始,就不允许选择永久了,而是只能选择 2 年(原来注册的有效期会变成 1000 年),那么水落石出。肯定是宝塔这个插件怕我们自己注册麻烦,为了降低小白的使用门槛而用了自己的应用程序,并不是让小白自己创建并且对接。
所以按照常理,我们只需要把他换成我们自己的应用程序既可。如果你有保留 2022 年以前创建的应用程序密码,那么恭喜你,你可以一劳永逸(密码一经创建仅允许查看一次)。
查看插件目录,发现有个 credentials.json 里面就是关于这部分的配置
自己创建一个应用程序(教程下文),然后将创建出来的信息填入 onedrive-international 的 client_id 和 client_secret 项,既可,如图
尝试重新授权登录
登录时成功打开授权页面
授权成功
手动执行一次备份操作
上传成功
附上 Microsoft Azure 创建应用程序的详细教程
访问 Azure 官网 https://azure.com
登录账号 ( 个人账号需要有权授权目标账号,组织账号需要有权授权成员,就是需要用上级账号或者管理员账号 ) 在 Azure 服务中,找到应用注册
如果你 Azure 的官网登录之后打不开 或者直接打不开 显示打开失败,那么需要用 Edge 浏览器,并且禁用浏览器插件,别问我为什么
你可以发现,我别的地方演示都是 Chrome ,但是 Azure 的演示 都是 Edge
如果你找不到引用注册,可以直接用这个快捷链接:https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade
注册一个新应用
名称随便写,可以写一个好记的,比如说如果你只是打算给宝塔用,你可以就叫宝塔,如果你不仅打算给宝塔用,你还打算给 Cloudreve 等程序用,你可以叫别的名字(一个应用程序 ID 和秘钥可以同时给多个程序使用,就像 QQ 互联登录一样,你并不需要给每个程序都注册一个 QQ 互联)
受支持的帐户类型 就选择能使用此应用程序或访问此 API 的账户
我这里使用的是组织管理员账号,如果你是个人账号打开,可能并不能选择第一个
第一个大概意思就是 只有当前账号所在的组织才能登录
第二个的意思就是 所有组织的账号都能登录
第三个的意思就是 所有组织的账号 和个人的微软账号都能登录
第四个的意思就是 只有个人的微软账号可以登录,不允许组织账号使用
然后根据经验,还有前面的文件的内容,重定向 url 填写 http://localhost/login/authorized
既可
创建成功之后进入你创建的应用程序,可以看到应用程序 ID 就是客户端 ID,按照前面的教程填写进文件中
然后在左侧导航菜单中找到证书和密码
选择新建客户端密码
设置备注和时间,然后点击添加(前面说过了,时间最长就是 24 个月,别去自定义慢慢试了)
然后把密码的值填写进前面的文件中(这个值只能查看一次,前面也说过了)
到此一个应用程序创建和使用的步骤就完成了
当然,肯定很多人好奇这个应用程序到底是什么,我这里也解释一下。这个就相当于是 QQ 的互联登录,假如你在某网站登录的时候选择 QQ 登录 或者 微信登录 那些,那些就是调用的他们的登录接口,你就相当于创建了一个 使用 Microsoft 账号登录的接口。如果你是开发者,那你一定知道,审核的步骤非常繁琐,个人还有限制应用创建的个数,所以想必大家都干过让自己的业务网站统一账户登录,或者是专门制作一个登录账户的程序来实现只申请一个接口让各个业务一起登录(登录转发)。文章前面说,一个应用程序和密码,可以给多个业务使用,也就是这个意思。不过如果有多个业务要用,还是推荐不同业务使用不同的密码以确保安全
11
请问一下为何我操作完成后在授权的时候并没有跳出授权哪一步,他直接给我了http://localhost/login/authorized?code=xxx 的链接呢?
是的,这是正确的。你应该把这个链接复制到宝塔插件的回调处然后点击保存。如果不出意外将会成功授权。
我尝试过了 不行 更换不同的应用也不行,都是一模一样的步骤,但是使用别人的客户端id+值就可以,真的百思不得其解。新建应用,然后重定向URL到http://localhost/login/authorized,再就是授予权限,然后生成值,将客户端ID和值填入文件中,再去登陆应该就可以了,但是复制local的那一长串链接后我本地提示授权失败(我自己的)。但是使用别人的cid和值就可以授权成功
可能是信息填写错误吧…