【问题标题】:Unable to get folder by id using Boxr gem Ruby SDK for Box API无法使用 Boxr gem Ruby SDK for Box API 通过 id 获取文件夹
【发布时间】:2018-10-04 17:02:17
【问题描述】:

我目前正在开发一个使用 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 时,该文件夹就在那里,并且在开发人员控制台中,我具有管理员访问权限。有什么帮助吗?

【问题讨论】:

    标签: jwt box boxapiv2 ruby-box


    【解决方案1】:

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

    阅读有关此主题的更多信息

    【讨论】:

    • 我通过控制台在配置上启用了Perform Actions as UsersGenerate User Access Tokens。但是我仍然得到Boxr::BoxrError: 404: Not Found 这是否意味着我仍然需要创建一个用户? client.create_user() 并从该用户请求文件夹?
    • 如果您启用了Generate User Access Tokens,您应该可以使用 Boxr::get_user_token()` 和您的个人用户帐户的 ID 访问该帐户中的文件。
    • 我可以创建token = Boxr::get_user_token("123456", 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'), client_id: ENV.fetch('BOX_CLIENT_ID'), client_secret: ENV.fetch('BOX_CLIENT_SECRET')) 但是,当我尝试获取文件夹client.folder_from_id("12345") 时,我收到Boxr::BoxrError: 404: Not Found 错误
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2015-03-16
    相关资源
    最近更新 更多