java - Box Java SDK - 404 File Not Found on public available document
问题描述
我正在使用 Box SDK 来获取这样的访问令牌:
val MAX_CACHE_ENTRIES = 100
val accessTokenCache: IAccessTokenCache = new InMemoryLRUAccessTokenCache(MAX_CACHE_ENTRIES)
val boxConfig: BoxConfig = {
// Read Box config file
val stream = getClass.getResourceAsStream( path )
val reader = new InputStreamReader( stream )
BoxConfig.readFrom( reader )
}
val connection: BoxDeveloperEditionAPIConnection = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(boxConfig, accessTokenCache)
val accessToken = connection.getAccessToken()
然后使用此访问令牌和文件 ID,我发送 POST 以读取文件,如下所示:
val fileId = "FILE ID"
val url = s"https://api.box.com/2.0/files/$fileId/content"
val header = List(Header("Authorization", s"Bearer $token"))
// send request
当我使用此自动生成令牌发送 POST 请求时,我会返回 404 File Not Found 错误,但如果我从 Box Developer Console 手动生成令牌,则相同的代码可以工作,并且我可以检索文件内容。
响应看起来像这样
{
"access_token":"TOKEN",
"expires_in":4195,
"restricted_to":[],
"token_type":"bearer"
}
我是否使用了错误的访问令牌?
解决方案
从看起来您在 Box 上使用基于 JWT / OAuth 2 的应用程序的情况来看,因此当您获得访问令牌 (BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection) 时,该访问令牌正在引用您的服务帐户。
服务帐户是代表您的应用程序的编程 Box 帐户 - 出于所有意图和目的,它只是另一个用户帐户,没有 box.com 的登录凭据。
我对您为什么会收到 404 的猜测是,您引用的文件 ID 是针对存储在其他用户帐户(很可能是您自己的 box.com 帐户)中的文件。由于访问令牌的范围是服务帐户,它试图在该服务帐户中查找文件 ID,而不是在您的其他帐户中。默认情况下,服务帐户不能只访问公司/企业中其他人拥有的所有文件/文件夹,它只能访问自己的数据,除非它在文件/文件夹上进行协作。
要访问该文件,您需要以拥有该文件的用户身份发出请求。这是有关如何生成用户范围内的访问令牌的指南,它应该可以解决问题。
希望有帮助,乔恩
推荐阅读
- kdb - q kdb中垂直连接的分区表和非分区表的区别
- c++ - URLOpenBlockingStreamW 到内存
- ms-word - 如何在带有 MS Word 的 AppleScript 中使用“另存为”命令
- google-apps-script - 从已发布的 Web App URL 获取脚本项目源 URL
- angular - 根据 API 输出在 Angular 6 中设置全局变量
- angularjs - 如何在同一页面上运行多个应用程序部分
- blazor - 如何在页面加载时在 Blazor 上加载 JavaScript 和 jQuery UI
- animation - 如何在颤动中使用带有onSwipe事件的轮子旋转动画?
- google-bigquery - 无法通过 Composer 中的 BigQueryOperator 将数据加载到大查询表中
- nginx - 只允许从 nginx 中的某个 URL 访问 service/proxy_pass