0

我目前正在使用 FormStack 表单服务的 Rails 5.2 应用程序。Formstack 使用 Box 来存储服务。我开始使用Boxr gem 与 Box API 进行交互。

要创建一个client,您将需要一个开发人员令牌。

client = Boxr::Client.new('{BOX_DEVELOPER_TOKEN}') 但是,这将BOX_DEVELOPER_TOKEN每 60 分钟到期一次。所以我决定使用 JWT 进行身份验证。

所以我生成token以下方式:

token = Boxr::get_enterprise_token(private_key: ENV.fetch('JWT_PRIVATE_KEY'), private_key_password: ENV.fetch('JWT_PRIVATE_KEY_PASSWORD'), public_key_id: ENV.fetch('JWT_PUBLIC_KEY_ID'), enterprise_id: ENV.fetch('BOX_ENTERPRISE_ID'), client_id: ENV.fetch('BOX_CLIENT_ID'), client_secret: ENV.fetch('BOX_CLIENT_SECRET'))

这就是我传递给生成客户端的内容:

client = Boxr::Client.new(token)

这将创建客户端:

#<Boxr::Client:0x000055fd60abb7e8
 @access_token={"access_token"=>"xxxxxxxxxxxxxxxx", "expires_in"=>3782, "restricted_to"=>[], "token_type"=>"bearer"},
 @as_user_id=nil,
 @client_id="xxxxxxxxxxxxxxx",
 @client_secret="xxxxxxxxxxxx",
 @enterprise_id="xxxxxxxxxxxxx",
 @identifier=nil,
 @jwt_private_key=
  "-----BEGIN ENCRYPTED PRIVATE KEY-----xxxxxxxxxxxxxx",
 @jwt_private_key_password="xxxxxxxxxxxxxxx",
 @jwt_public_key_id="xxxxxxxxxxxxxx",
 @refresh_token=nil,
 @token_refresh_listener=nil>

但是,当我尝试通过 ID 检索文件夹时,我收到一个错误,当我通过BOX_DEVELOPER_TOKEN创建客户端时没有收到该错误。

folder = client.folder_from_id("12345678")

Boxr::BoxrError: 404: Not Found
from /usr/local/bundle/gems/boxr-1.4.0/lib/boxr/client.rb:239:in `check_response_status'

在企业设置中,我通过提供 API TOKEN 授予对应用程序的访问权限。我不确定为什么我无法获取该文件夹。当我转到文件夹 ID 时,该文件夹就在那里,并且在开发人员控制台中,我具有管理员访问权限。有什么帮助吗?

4

1 回答 1

1

您看到的行为是由于您的开发人员令牌将调用者身份验证为您自己的个人用户帐户,但是在使用 JWT 身份验证时,API 调用是作为代表应用程序本身的特殊服务帐户进行的。默认情况下,这些帐户无法访问相同的内容;您希望在它们之间共享的任何文件夹都必须明确协作,或者必须允许服务帐户模拟拥有该文件夹的用户帐户。您可以在https://developer.box.com/v2.0/docs/service-account阅读有关此主题的更多信息

于 2018-10-04T19:09:09.000 回答