如何安全地将 apiKey / 客户端密码从 AngularJS 传递到 REST API
How to pass apiKey / client secret securely from AngularJS to REST API
所以我正在进行一个项目,我将向特定的业务合作伙伴提供信息源。不需要登录,因为业务合作伙伴的前端必须将预分配 apiKey
连同任何请求一起传递到 my REST API。 api 仅响应包含有效 apiKey
的请求,并且在我们生成 apiKey.
时已经预定义了其访问级别。
目前我正在使用 CakePHP,使用 curl
,传递 REST 请求方法,并将硬编码的 apiKey
作为参数。到目前为止,安全还不是问题。但是我们的团队在想,如果我们的业务合作伙伴希望他们的网站在最近流行的 JS 前端框架中完成,例如 AngularJS.
怎么办?
同样的场景,这么简单的任务,用JS框架是做不到的。我显然不能简单地给他们客户端密码 (apiKey
) 并让他们将其包含在他们的客户端代码中。任何人都可以查看机密并访问我们的 REST API.
现在我们正在谈论安全性,我的团队真的不太了解。克服这个问题的方法是什么?如何安全、隐蔽地传递 客户端密码 以及来自 AngularJS 的 http 请求?有什么建议或者有人能指出我可以研究的东西吗?
虽然我有一些想法,但它们听起来不太正确。
- 我将把 AngularJS 放在 CakePHP 的 webroot 中。不过,那将是一个非常肮脏的 hack...只是引入不必要的复杂性。
- 使用 Origin Domain / IP / Public Secret 和时间戳等约束的组合生成哈希,在我的 API 方面,我比较每个请求的哈希和 return 访问令牌...类似的东西...
有不同的选择
- JWT (see my article)
- OAuth (pick one)
- 您的 API
的代理
前两个需要初始身份验证请求,您将获得一个令牌,该令牌会在以后对您网站的每个请求中传递。
您可以创建一个代理,站点调用该代理然后再次调用真正的 API 并添加您的 API 密钥。
所以我正在进行一个项目,我将向特定的业务合作伙伴提供信息源。不需要登录,因为业务合作伙伴的前端必须将预分配 apiKey
连同任何请求一起传递到 my REST API。 api 仅响应包含有效 apiKey
的请求,并且在我们生成 apiKey.
目前我正在使用 CakePHP,使用 curl
,传递 REST 请求方法,并将硬编码的 apiKey
作为参数。到目前为止,安全还不是问题。但是我们的团队在想,如果我们的业务合作伙伴希望他们的网站在最近流行的 JS 前端框架中完成,例如 AngularJS.
同样的场景,这么简单的任务,用JS框架是做不到的。我显然不能简单地给他们客户端密码 (apiKey
) 并让他们将其包含在他们的客户端代码中。任何人都可以查看机密并访问我们的 REST API.
现在我们正在谈论安全性,我的团队真的不太了解。克服这个问题的方法是什么?如何安全、隐蔽地传递 客户端密码 以及来自 AngularJS 的 http 请求?有什么建议或者有人能指出我可以研究的东西吗?
虽然我有一些想法,但它们听起来不太正确。
- 我将把 AngularJS 放在 CakePHP 的 webroot 中。不过,那将是一个非常肮脏的 hack...只是引入不必要的复杂性。
- 使用 Origin Domain / IP / Public Secret 和时间戳等约束的组合生成哈希,在我的 API 方面,我比较每个请求的哈希和 return 访问令牌...类似的东西...
有不同的选择
- JWT (see my article)
- OAuth (pick one)
- 您的 API 的代理
前两个需要初始身份验证请求,您将获得一个令牌,该令牌会在以后对您网站的每个请求中传递。
您可以创建一个代理,站点调用该代理然后再次调用真正的 API 并添加您的 API 密钥。