Box Java SDK-404文件未在公开文档中找到

问题描述 投票:0回答:1

我正在使用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"
}

我使用访问令牌是否错误?

java scala access-token box-api
1个回答
0
投票

[从外观上看,您在Box上使用基于JWT / OAuth 2的应用程序,因此,当您获得访问令牌(BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection)时,访问令牌正在引用您的服务帐户。

该服务帐户是代表您的应用程序的程序化Box帐户-出于所有目的和用途,它只是一个没有box.com登录凭据的用户帐户。

我对为什么得到404的猜测是,您所引用的文件ID是针对存储在其他用户帐户(很可能是您自己的box.com帐户)中的文件的。由于访问令牌的作用域是服务帐户,因此它试图在该服务帐户中找到文件ID,而不是在其他帐户中。默认情况下,服务帐户不能仅访问公司/企业中其他人员拥有的所有文件/文件夹,除非它在文件/文件夹上进行协作,否则只能访问自己的数据。

要访问该文件,您需要以拥有该文件的用户身份进行请求。 Here's a guide有关如何生成针对用户的访问令牌的信息,应该可以解决该问题。

希望有帮助,乔恩

© www.soinside.com 2019 - 2024. All rights reserved.