Podio JS:我可以相信 access/refresh 令牌只能从特定 IP 地址使用吗?

Podio JS: Can I trust that the access/refresh token can only be used from a specific IP address?

我正在开发自己的应用程序来自定义 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' }

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

The API is available at https://api.podio.com. It is RESTful and uses json as the exchange format. SSL is mandatory and used for all communication. OAuth2 is used for authorization and authentication.

但是正如您从代码中看到的那样,我没有向它提供来自证书签名机构的任何证书,并且该程序不在我指定为 [=30= 的域中的 运行 ] URL在我的跑道账户设置下。所以看起来任何获得访问/刷新令牌副本的人都可以访问存储在我跑道账户中的所有数据。

--> 跑道 API 是否允许任何拥有令牌的服务器访问给定的跑道用户帐户?

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

提前致谢。

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


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

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

有关更多详细信息,请参阅:How does SSL/TLS work? and How HTTPS secures connections

所以我肯定地假设问题 1 的答案是:是的。

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

关于这个问题,首先要弄清楚的是授予访问权限的过程是如何进行的。它来自 PODIO 网站,该网站使用 OAuth2 授予第三方应用程序访问与给定 PODIO 用户帐户相关的存储数据的权限。这个过程可以这样形象化:

其中User为PODIO相关用户账号,应用为第三方应用,授权和资源服务器为PODIO服务器

在此上下文中,重要的是要注意第三方应用程序可以在 PODIO 用户帐户的所有者注销后继续使用访问令牌,并且一旦令牌过期,第三方应用程序可以收到一个使用与原始访问令牌一起接收的刷新令牌的新访问令牌。也就是说:一旦用户帐户的所有者授权发行第一个访问令牌,第三方应用程序就可以 24/7 365 访问 PODIO 帐户,而无需用户帐户所有者的进一步参与(当然,所有者可以选择撤销访问权限)。

同样重要的是要注意 PODIO API 授予对用户帐户中(几乎)所有数据(联系人、文件、评论、项目...)的访问权限。

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


结束语:令牌在传输时被加密,这当然可以防止滥用。但是,服务器和客户端之间的通信允许使用客户端证书。

有关这些的更多详细信息,请参阅:What is a client side certificate?

有关它们为何很少使用的更多信息,请参阅:Why is nobody using SSL client certificates?

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

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