REST API:在 Javascript SPA 中安全地处理身份验证
REST API: Securely Handle Authentication in a Javascript SPA
我们正在使用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 免费试用帐户已启用此功能。
- 可以't让我的if语句处理js中的html表单输入
- keyup事件处理程序更改焦点不适用于快速键入
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 如何使 Ajax 发布到 Handler.ashx 安全并停止直接调用处理程序
- 是一个经过SSL处理的JSONAPI,它使用cookie进行身份验证,并且随机数通常是安全的
- 在窗口中使用“事件处理程序”是否是确定窗口是否支持给定事件处理程序的安全方法
- 正在确定事件处理程序'SpiderMonkey编译器入口点的安全主体
- 用符合内容安全策略的代码替换多个内联按钮onclick事件处理程序
- 使用JQueryAjax和ASP.NET泛型处理程序时必须采取的XSS和CSRF预防之外的安全措施
- 对于不受信任的javascript代码,web worker是一种安全的沙箱处理方法吗?
- 如何处理“拒绝设置不安全标头:连接”
- Javascript抛出:拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:"script-src
- 如何处理由于交叉原点导致的安全错误
- 如何在安全的网站上正确地在chrome扩展内容脚本中预处理ajax
- Cordova-拒绝执行内联事件处理程序,因为它违反了以下内容安全策略
- 使用AngularJS安全处理登录的最佳方法是什么
- nodejs最安全的路径和文件处理
- 在读取文件时,编写这样的代码来处理错误和解析JSON数据是否安全?