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

标签 javascript ssl https podio

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

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

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

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

提前谢谢你。

最佳答案

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


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

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

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

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

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

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

enter image description here

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

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

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

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


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

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

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

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

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

关于javascript - 跑道JS : Can I trust that the access/refresh token can only be used from a specific IP address?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35015975/

相关文章:

ssl - 我可以在重复 SSL_write() 时将数据附加到缓冲区吗?

ssl - 非 SSL http 请求会影响我网站的安全性吗?

javascript - 通过 https 加载的网页如何连接到在本地主机上运行的 WebSocket 服务器?

ssl - Movable Type Administration to https 子域

javascript - 在 Node.js 下使用express和session配置socket.io和htpps

javascript - 将属于某个数组名称的所有输入检索到 jquery 变量中

javascript - 请解释MVC中的VC for javascript

javascript - 使用 JQuery 显示 JSON

javascript - 有关如何以及何时在 React 中使用焦点的示例

ssl - "Peer not authenticated"带 Mule S3 连接器