保护 javascript 前端/REST 后端架构网站的最佳方式?

信息安全 应用安全 Web应用程序 javascript oauth 休息
2021-08-09 21:50:44

我想构建以下项目:

  • 任何经过身份验证的客户端都可以访问公共 REST API 后端。
  • 前端带有 HTML/CSS/Javascript 中的静态文件,带有 Backbone.js 对 REST 后端的 jQuery 调用。

实际上,在我的架构中存在三方:前端,它是后端的客户端,后端和想要在前端登录页面上进行身份验证的用户。

保护此架构中涉及的三方的最佳方法是什么?

事实上,我相信如果我在 javascript 中做所有事情,就不可能在前端做一个安全的应用程序,所以我打算将身份验证/授权委托给我的服务器前端的代理层。

我的问题是我不知道如何使用 OAuth 执行此工作流程:

  • 用户想在前端创建一个帐户。
  • 前端将帐户创建委托给 REST 后端。
  • 后端创建帐户并向前端发送确认。
  • 然后用户可以执行需要授权的调用。

而且我还希望任何其他第三方应用程序都可以使用 OAuth 访问我的 REST 后端。

我是否必须在 REST 后端使用 2-legged 或 3-legged OAuth?

我可以将我的前端视为具有创建用户帐户能力的特殊第三方应用程序吗?

我可以在前端使用什么安全协议?

1个回答

好吧,既然您声明 REST API 只能由经过身份验证的客户端访问,您首先需要一种会话形式来记住客户端的身份验证状态。根据您是否可以更改 REST API 的服务器代码,您可以在 API 提供服务器本身上实现这一点。

这可以使用任何众所周知的用户身份验证方式,例如用户名/密码组合或使用(自签名)证书。

但是,就像使用 HTTP 一样,您必须确保密码不会以明文形式传输,并且一旦会话通过身份验证,连接不应泄漏会话标识符,从而使其被劫持。这基本上意味着您必须模仿类似 SSL 的行为或为您的前端实现 SSL 支持。一个例子可以在这里找到:http: //assl.sullof.com/assl/

您与 OAuth 相关的问题是一个不同的问题,如果您仍然想知道它,我建议您在一个单独的问题中提出这个问题。

关于代理层,这只是一个可行的选择,只要 API 不是通过这种代理以外的方式公开访问的。此代理层必须实现相同的类似 SSL 的属性,但此设置为您提供了能够保持身份验证逻辑和 API 提供程序分离的附加功能。但是,如果您能够更改 API,我不建议您这样做,因为如果您的服务器的任何部分意外地提供了对私有 API 的访问,您可以绕过您的身份验证要求。