我正在一个分配给我的项目中实现 OAuth2(100% 符合规范)。
假设我在资源服务器上有一个名为“file.txt”的文件。
客户端想要下载文件。假设文件下载是通过另一台服务器 dl.example.com
完成的,因为可能有多个资源服务器,并且公共(public)下载访问点将是一种更简洁的方法。 (?)
那么如果客户端想要下载一个文件,并将其输出到浏览器,首选过程应该是什么?
如果我采取以下方法:
1) 客户端向 dl.example.com?access_token=123123&fpath=file.txt
2) dl.example.com
向相应的资源服务器发出请求
3)资源服务器将文件发送到dl.example.com
4) dl.example.com
将文件发送到客户端
5)客户端输出文件到浏览器下载
将会有额外的网络 I/O 开销。
这种方法不是正确的方法吗?像 Dropbox 这样的“大玩家”如何做到这一点?我检查了 Dropbox 的网址: dl-web.dropbox.com/*whatever*
。 Dropbox 的方法与上述方法完全不同吗?
最佳答案
我不会通过 dl.example.com 服务器代理文件资源的传递。
access_token 是这里的关键。如果资源服务器本身支持 OAuth2 并且有权访问 access_tokens 存储,您可以使用状态 303 重定向来响应,从原始请求重定向到需要的实际资源地址:
Original Request: https://dl.example.com?access_token=123123&fpath=file.txt
Response: 303 https://resource.server.com/path/file.txt?access_token=123123
您可以标记 Curl 以遵循重定向。如果您正在开发客户端 SDK 来包装访问,那么这一切都可能是不可见的。
关于php - 从资源服务器下载文件到浏览器(OAuth2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25329592/