REST API:在 Javascript SPA 中安全地处理身份验证

REST API: Securely Handle Authentication in a Javascript SPA

本文关键字:安全 处理 身份验证 SPA API Javascript REST      更新时间:2023-09-26

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

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

步骤 1

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

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

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

步骤 2

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

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

步骤 3

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

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

我们可以通过混淆JS代码来添加另一层安全性,但这是通过模糊性来确保安全性。

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

谢谢!

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

相关文章: