我正在使用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,而不是在其他帐户中。默认情况下,服务帐户不能仅访问公司/企业中其他人员拥有的所有文件/文件夹,除非它在文件/文件夹上进行协作,否则只能访问自己的数据。
要访问该文件,您需要以拥有该文件的用户身份进行请求。 Here's a guide有关如何生成针对用户的访问令牌的信息,应该可以解决该问题。
希望有帮助,乔恩