0

我们正在使用 DurandalJS 在 Javascript 中开发一个单页应用程序,它将成为 REST API 服务器的客户端。

以下是我们考虑身份验证过程的方式:

步骤1

客户端将拥有一个 API 密钥和一个私钥;API 密钥将是公开的,而私钥将是秘密的,仅用于签署请求(签名将由服务器重新创建并进行比较,类似于两腿 OAuth)。

客户端将进行 POST 调用https://api/sessions/,我们将作为参数发送:

  • api键
  • 用户/通行证
  • 随机数
  • 时间戳
  • 签名(使用私钥的参数的 HMAC)

第2步

服务器将使用客户端在后续请求中使用的auth_token进行响应,以识别用户。该令牌将是短暂的(例如设置为在一小时内到期)。

auth_token 将被分配给某个 user_id 和 API 密钥,因此如果被另一个 API 密钥使用,它就无效。

第 3 步

任何后续请求都必须包括 API 密钥、随机数、时间戳、auth_token 和签名。随机数和时间戳用于过滤中间人的重放攻击,而加密将由 SSL 保护。

使用 Javascript SPA 的缺点是代码是通过控制台公开的,因此可能会发现私钥。但是,即使攻击者发现并重新创建了签名,没有 auth_token 的任何请求都将无效。由于令牌是通过调用在安全的 HTTPS 连接中获得的https://api/sessions,所以中间的人无法获得它。

我们可以通过混淆 JS 代码来添加另一层安全性,但这是通过晦涩难懂的安全性。

我的问题是:是否有更安全的方式来处理使用 SPA JS 客户端的身份验证过程?

谢谢!

4

1 回答 1

1

考虑使用实现 OAuth 的 Apigee 代理。请参阅以下文档:http ://apigee.com/docs/api-platform/content/secure-calls-your-api-through-oauth-20-client-credentials 。Apigee 免费试用帐户已启用此功能。

于 2013-11-06T01:28:34.393 回答