客户端应用程序与 Keycloak OIDC 或通过微服务直接集成?

Direct Integration of Client App with Keycloak OIDC or via a microservice?

我有这样的设置:

  1. 用于身份和访问管理服务的 Keycloak OIDC 服务器 - 运行 在云端 - A
  2. 后端 RESTful 微服务 - 运行 云端 - B
  3. 后端 RESTful 微服务 - 运行 在多个位置的本地服务器中 - C
  4. 用户移动应用程序 - 多个用户跨位置 - X
  5. 用户 Web 应用程序 - 多个用户跨位置 - Y

现在,这是我的疑惑:

需要这种访问方式:

托管

通常的托管最佳做法是将身份系统置于反向代理/网关(例如 NGINX Plus)之后。这是因为身份系统连接到敏感数据源,而反向代理可以是入口点,例如在 DMZ 中。然后,您可以限制暴露在互联网上的 OIDC 端点。

避免将本地代理写入身份系统。因为这可能不如经过实战测试的系统(如 NGINX)具有弹性。有关概述,请参阅 IAM Primer

安全设计模式

反向代理还支持可以执行许多实用程序安全工作的插件,例如将安全 cookie 转换为访问令牌。所以它是架构中非常有用的部分。有关使用高级 LUA 编程语言的示例插件,请参阅 this article