9

要么我很密集,要么文档假设我已经知道他们在告诉我什么,但是我需要对 box.com 应用程序进行身份验证进行一些说明。我真的不明白这是怎么回事。当我读到它时:

  1. 在用户机器上运行的应用程序向 Box 发送请求,包括所有小秘密(如果用户知道如何阅读代码,这些秘密就不再是所有秘密了)。
  2. 用户被定向到 Box 登录页面,然后该页面将用户发送到我的服务器(未指定页面),并附上验证码。
  3. 该应用程序以某种方式神奇地从我的服务器获取该代码,并向 Box 发送访问令牌的请求。
  4. Box 将访问令牌发送到我的服务器?
  5. 该应用程序再次神奇地从我的服务器获取访问令牌并发送其 APT 请求。

显然我在某个地方迷路了。

而且,为什么我必须让服务器参与该过程?关于制作 JavaScript 应用程序的文章是指对令牌的直接请求。有没有关于那个地方的文档?

4

4 回答 4

16
  1. 您在 Box 上注册您的应用程序
  2. 注册后,您会在 Box 网站上收到一次 clientId 和 clientSecret
  3. 您在应用程序的某处硬编码您的凭据
  4. 当您的应用程序第一次需要访问 Box API 时,它应该将用户重定向到https://www.box.com/api/oauth2/authorize,并指定您的 clientId、clientSecret 和 redirectURI 作为参数。关于redirectURI 见下文。
  5. box.com 网站打开。用户在 box.com 上的 Web 表单中输入自己的凭据
  6. 用户允许您的应用程序通过 box.com 网站上的 API 访问他的文件
  7. Box 使用之前指定的 redirectURI 将用户重定向回您的应用程序。此请求的参数之一是“代码”。这是一个非常短暂(30 秒)的访问代码,仅适用于获取真正的访问令牌。
  8. 在接下来的 30 秒内,您的应用程序应该再次调用 Box API 到下一个 URL: https://www.box.com/api/oauth2/token,指定之前获得的代码。如果一切正确,您的应用程序会收到一个 access_token、一个 refresh_token 和“过期”值。
  9. 现在您的应用程序可以向 Box API 发出请求,每次都指定 access_token
  10. access_token 的过期秒数,在“expires”字段中指定。它应该是大约 3600 秒或 1 小时。每次您的应用程序看到 access_token 已过期时,它应该使用 refresh_token 向 Box 发出另一个请求,并在另外 1 小时内获取新的 access_token。
  11. refresh_token 本身在 14 天后到期

注意:如果您开发桌面应用程序,那么您应该在步骤 4 中为用户打开浏览器,redirectURI 应该类似于http://127.0.0.1:8080/Callback并且您应该运行一个小型网络服务器,以便使用步骤 7 中的代码捕获重定向。

于 2013-04-11T08:08:33.630 回答
2

Box 要求您在应用程序的配置文件中指定 redirect_uri,并且它必须是 HTTPS URL。

因此,无法将 box 与 google 的oauth2 文档 称为“客户端”或“已安装”的应用程序一起使用,只允许使用“Web 服务器应用程序”。Web Server 应用程序不存在秘密泄露问题,因为只有服务器知道秘密。如果您希望客户端直接发出 api 请求,您可以在 oauth 事务完成后将访问令牌从您的服务器传递到客户端上的 javascript。

于 2013-02-01T15:53:31.407 回答
0

在您的问题中,您并不完全清楚您实际尝试生产的内容。

然而,我怀疑您正在尝试使用他们在 API V2 中提供的 OAUTH2 解决方案编写一个需要对盒子进行身份验证的客户端应用程序。

如果这是针对 iPhone 的,例如 BOX 有一个很好的例子来说明如何处理它。

在 WinForm 应用程序中,您需要在 browser1.isnavigating 事件中捕获由框发回的结果代码。

Windows 控制台应用程序为您注册一个自定义 URI 注册以收集代码。

这些都不需要在 API 开发人员 Application on box 中注册,因为您会将请求中所需的重定向传递到 box。

如果这没有为您指明正确的方向并且您正在编写一个 .NET 应用程序,请再次发布,我将尝试进一步澄清。

于 2013-02-01T22:31:53.000 回答
0

Box 需要某种形式的用户交互,这在我看来是短视的,但请尝试使用模拟用户交互的 Web 服务,然后您可以将令牌保存/传递到您的应用程序以与 Box“云”同步。

于 2014-03-14T13:32:16.027 回答