1

我正在构建一个单页应用程序和一个 REST API 来处理来自客户端和任何可能的第三方客户端的请求。

我的想法是创建三个服务器:

  • A - API,基于 OAuth
  • B - 带有 html/css/js 文件 + 部分/视图的静态文件
  • C - 处理登录的 Web 服务器(节点或 python 或任何东西)

可能是第四个处理 Redis 或其他任何东西的会话。

我希望 SPA 让用户注册和/或登录到服务器 C,给他一个访问令牌并让他直接与 API (A) 对话。

我的问题是处理这个问题的正确机制是什么?

  • 将带有访问令牌的会话 cookie 设置到主应用程序客户端(SPA),以便只要会话存在,它就可以与 REST API 对话
  • 为了避免创建服务器 C 并在服务器 A 中处理身份验证,(那么第三方服务呢?)
  • 还要别的吗

我的问题有点混乱,所以请随时向我询问更多详细信息。

4

1 回答 1

0

您基本上描述的是“票务”系统,只是您将票称为“令牌”。多年来,这个问题已经通过不同的标准化协议以不同的方式得到解决。麻省理工学院开发的一个非常流行的开放标准是Kerberos

如果可能的话,我强烈建议使用现有的协议和现有的实现。尝试“推出自己的”安全性非常非常困难,并且通常会导致应用程序易受攻击。想想多年来困扰微软的瘟疫,与 *nix 系统相对安全的声誉相比 :-)

我的第一种方法是采用 Kerberos 或其他类似协议。如果您一心想自己动手,那么越简单越好。我会选择你的第二个解决方案并废弃服务器 C。让不同的服务器执行身份验证时出错的空间太大。

我知道这并不完全是您希望的答案,但我希望它有所帮助。

于 2013-03-25T16:03:57.383 回答