2

我正在开发自己的应用程序来自定义 PODIO 的行为。我非常关心我和我的客户数据的安全性。因此,我编写了以下测试代码:

var api_key = {
    authType: 'password',
    clientId: 'foo',
    clientSecret: 'foo'
};

var podio_api = require('../node_modules/podio-js/lib/podio-js');
var podio = new podio_api (api_key);

var username = 'foo';
var password ='foo';

var callback = function (err, responsedata) {

    if (err) throw (err);
    console.log (responsedata);
};

podio.authenticateWithCredentials (username, password, callback);

它将以下内容记录到控制台:

{ access_token: 'foo',
  expires_in: 28800,
  token_type: 'bearer',
  scope: 'global:all',
  ref: { type: 'user', id: 999999 },
  refresh_token: 'foo' }

所以换句话说,它工作得很好(谢谢!)。但是安全呢。以下是 Podio 的主页上关于 API 约定和结构的说明:

该 API 可在https://api.podio.com获得。它是 RESTful 并使用 json 作为交换格式。SSL 是强制性的,用于所有通信。OAuth2 用于授权和认证。

但正如您从代码中看到的那样,我没有向它提供任何来自证书签名机构的证书,并且该程序没有在我指定为在我的 Podio 帐户设置下返回 URL 的域上运行。因此,任何获得访问/刷新令牌副本的人似乎都可以访问存储在我的 Podio 帐户中的所有数据。

--> Podio API 是否授予拥有令牌访问给定 Podio 用户帐户的任何服务器?

--> 使用 Podio JS 时访问/刷新令牌的传输是否加密?

先感谢您。

4

1 回答 1

0

我绝对不是专家,但由于没有人回答这个问题,这里是我自己想出的答案。


问题一:令牌的传输是否加密?

首先要明确的是 HTTPS 的使用实际上是如何工作的。它由服务器和客户端之间的通信组成。在这种情况下,服务器是https://api.podio.com,客户端是第三方应用程序。我发现在这种关系中,只有服务器需要由证书颁发机构签署的证书才能建立加密的 HTTPS 通信。

有关更多详细信息,请参阅:SSL/TLS 如何工作?以及HTTPS 如何保护连接

所以我绝对假设问题 1 的答案是:是的。

问题 2:PODIO 服务器是否向任何拥有令牌的人授予访问权限?

关于这个问题,首先要明确的是授予访问权限的过程是如何工作的。它来自 PODIO 网站,该网站使用 OAuth2 授予第三方应用程序访问与给定 PODIO 用户帐户相关的存储数据的权限。该过程可以通过以下方式可视化:

在此处输入图像描述

其中 User 是相关的 PODIO 用户帐户,应用程序是第三方应用程序,授权和资源服务器是 PODIO 服务器。

在这种情况下,重要的是要知道第三方应用程序可以在 PODIO 用户帐户的所有者注销后继续使用访问令牌,并且一旦令牌过期,第三方应用程序可以使用与原始访问令牌一起收到的刷新令牌。即:一旦用户帐户的所有者授权发布第一个访问令牌,第三方应用程序就可以 24/7 365 访问 PODIO 帐户,而无需用户帐户所有者的进一步参与(当然所有者可以选择撤销访问)。

同样重要的是要知道,PODIO API 允许访问(几乎)用户帐户中的所有数据(联系人、文件、评论、项目......)。

鉴于此,我很遗憾得出问题 2 的答案也是:是的结论。


最后一句话:令牌在传输时是加密的,这当然可以防止滥用它。然而,服务器和客户端之间的通信允许使用客户端证书。

有关这些的更多详细信息,请参阅:什么是客户端证书?

有关为什么很少使用它们的更多信息,请参阅:为什么没有人使用 SSL 客户端证书?

客户端证书的使用将允许服务器在每次请求访问与给定用户帐户相关的数据时验证第三方客户端应用程序。如果令牌最终落入坏人之手,这将增加额外的安全层。我对 PODIO 目前似乎没有提供这一层安全性感到有些失望。

如果此答案不充分或不正确,请帮助编辑。TIA。

于 2016-01-27T20:31:02.547 回答