**通过反向代理保护不同类型的未安全应用程序**

我目前正在处理还需要完善的一个项目,我对当前正在考虑的解决方案感到不安。

主要的想法是在不修改现有应用程序的情况下保护这些没有自身安全措施的应用程序。这些应用程序在外部不可访问,仅可以通过反向代理(OpenResty)访问。

用户不能访问所有应用程序,用于标识用户的解决方案是 Keycloak。

主要组件是:

  • 一个 Angular 门户:入口点。
  • 一个重定向用户到所选应用程序的反向代理。
  • IAM:Keycloak。
  • 所有可用的应用程序。

此图解释了它

思路是:

  • 用户在 Keycloak 上单击登录,并使用包含他的角色(他可以访问的应用程序)的访问令牌(JWT)返回门户。
  • 用户在门户上单击一个应用程序,然后通过反向代理重定向到目标应用程序。
  • 反向代理检查令牌的有效性(exp、iss 和角色)

我知道这不是进行某些应用程序之间 SSO 的正确方法,但这里的要求是未保护的应用程序不能被编辑,而必须由一个前台系统(即反向代理)保护

我的问题是:好的,这对于第一个调用将起作用,因为用户在门户上拥有他的 JWT 令牌,并使用它第一次调用该应用程序,但是之后,当用户在此应用程序中单击链接时... 就没有更多令牌了。这种架构对于保护 REST API 很有效,但对于 Web 应用程序来说,对我来说有点不确定。

点赞
用户3348604
用户3348604

尝试使用 github.com/gambol99/keycloak-proxy。它将令牌存储在 cookie 中,这对于 Web 应用程序是更好的选择。

!!! 警告:我猜任何身份验证代理都只能使用 Authorization Code Flow_,但是对于单页应用程序(Angular),_Implicit Flow 是推荐的。这确实取决于你的 Angular 应用程序。首先分析安全性的正反面,以确保安全。

2018-07-17 15:04:15
用户5662433
用户5662433

一般来说,在登录 Keycloak 前,你会有一个反向代理服务器来处理用户身份验证。

流程大致如下:

  1. 用户访问门户网站。
  2. 门户网站通过反向代理将用户重定向到应用程序。
  3. 反向代理服务器将首先将用户重定向到 Keycloak 进行身份验证,并在浏览器和反向代理服务器之间建立一个安全会话。
  4. 反向代理服务器将请求转发给你的应用程序服务器。
  5. 对于所有后续请求,用户始终通过反向代理服务器进行访问。
2018-07-17 15:04:38