1.缘起 #
最近白嫖了微软的开发者订阅(以后可能会写一篇文章),E5是个好东西~凭这个我白嫖了1TB的OneDrive。
正好同学有需求,我就想着把OneDrive外链搞出来,耗了我一个上午的时间查API文档和调试(我亲爱的生母后妈一直喊着:”背书!背书!“),然后终于搞出来了//微软的生态还算很好的👍
2.正文 #
首先,你需要有一个有OneDrive的账号(微软开发者订阅/教育版A1等等等等)以及Postman这种接口调试工具(用CURL的,膜拜膜拜)
我们这里以国际版OneDrive与OneDrive for Business为例,国内版本(世纪互联)请自行使用G搜索
首先,到这里然后点击创建应用。
应用创建时,名称随便你填,重定向URL建议https://localhost(其实你填其他的也行,我们最主要是获取Code)。
注册好了之后,记住自己应用的应用程序/客户端ID,我们以后要用的。
然后我们要授予这个API权限,先点击API权限,再点击添加权限。
然后选择Microsoft Graph
再选择委托的权限。
在下面一堆的API里面找到Files然后展开,选择Files.Read.All和Files.Read.Selected。然后再点击添加权限。
然后再看一下权限是不是配置好了
接下来我们还要再配置Secret令牌,这个也要用.....
回到主页,点击添加证书或机密(微软神仙机翻,颇有软体的味道)。
然后再点击新客户端密码
说明随你,期限你自己挑。
然后创建好了,把值记住,以后我们也要用的。
最后一步,进入概述,点击终结点/地域(Endpoint)微软神仙机翻。找到OAuth 2.0 授权终结点(v2)与OAuth 2.0 令牌终结点(v2),这两个链接复制好,就是我们的Base URL。
接下来我们就开始用了~
首先我们需要授权它访问我们的OneDrive资源,就需要Code。
https://{OAuth 2.0授权终结点[v2]}?client_id=[自己的应用程序/客户端ID]&redirect_uri=[你在之前写的跳转URL]&grant_type=authorization_code&client_secret=[令牌的值]&scope={offline_access Files.Read.All Files.Read.Selected]&response_type=code
这里注意下,scope里面的如果有offline_access好像只要验证一次,值要有空格!剩下的是你API申请的权限(就是写你API权限那么一堆)
最后的URL生成就像这样:
https://login.microsoftonline.com/隐私片段/oauth2/v2.0/authorize?client_id=隐私片段&grant_type=authorization_code&client_secret=隐私片段&scope=offline_access Files.Read.All Files.Read.Selected&response_type=code&redirect_uri=https://localhost/
然后就可以登录授权了~登录授权接受即可。
授权完了之后,我们会在你自己设置跳转的网页的?-后面看到一大堆物品,我们只需要提取出里面的code就行了~
`https://localhost/?code=你要提取的东西&session_state=隐私
?code=后&前的所有内容都要复制,保留备用。
接下来我们要把code拿去换token,我们打开Postman,新建一个Request。然后POST 你的OAuth 2.0 令牌终结点(v2)
参数:(Postman里面选择body - x-www-form-urlencoded)
参数 | 描述 |
---|---|
client_id | 你的应用程序/客户端ID |
client_secret | 你设置的安全令牌值 |
code | 你刚刚复制的那一段code |
grant_type | 就是authorization_code(直接写进去就行了) |
redirect_uri | 你自己应用上面写的回调URL |
然后再点击Send,再在下面把Access_Token复制好,要用的。
接下来我们就要获取你OneDrive里面的文件了
然后我们再在Postman里面创建一个Request,GET格式,在Header加上:
Key是Authorization,Value是
bearer 你拿到的access_token
然后我们在URL里面输入上
https://graph.microsoft.com/v1.0/me/drive/root:/你文件的相对目录
比如说你的文件在根目录上,叫a.flv,则是
https://graph.microsoft.com/v1.0/me/drive/root:/a.flv
然后我们再点一下Send,我们就已经可以知道下载地址了,在@microsoft.graph.downloadUrl里面的那一串数字就是下载链接。
其实我们只是调试了一下,我们具体在应用过程中可以直接上XHR。
微软太良心了!速度又快还是免费的,比**网盘好多了~
3.总结 #
微软的API太多了,太广了,验证太那个了,因此难学啊~