客户端应用程序与 Keycloak OIDC 或通过微服务直接集成?
Direct Integration of Client App with Keycloak OIDC or via a microservice?
我有这样的设置:
- 用于身份和访问管理服务的 Keycloak OIDC 服务器 - 运行 在云端 - A
- 后端 RESTful 微服务 - 运行 云端 - B
- 后端 RESTful 微服务 - 运行 在多个位置的本地服务器中 - C
- 用户移动应用程序 - 多个用户跨位置 - X
- 用户 Web 应用程序 - 多个用户跨位置 - Y
- X, Y 使用 密码授予 访问 B - 即 X, Y 调用 login API of B 用户名和密码; B 从 Keycloak 获取访问令牌,然后发送它作为响应,他们 (X,Y) 使用它进一步 API 调用 B 获得授权。
现在,这是我的疑惑:
- 我们是否应该为 C 做同样的事情?即 B 中是否应该有一个 API 可用于 C 调用 post 客户端-id 和 client-secret (client-credentials grant),获取访问令牌?这是一个好的模式/有效的实施吗?
需要这种访问方式:
- Ops 团队正计划隐藏 A 以免暴露在互联网上。因此,B 将充当它的抽象层。
- 防止 IAM 服务暴露在互联网上是个好主意吗?我以前从未见过抽象的 IAM 服务。请澄清。
托管
通常的托管最佳做法是将身份系统置于反向代理/网关(例如 NGINX Plus)之后。这是因为身份系统连接到敏感数据源,而反向代理可以是入口点,例如在 DMZ 中。然后,您可以限制暴露在互联网上的 OIDC 端点。
避免将本地代理写入身份系统。因为这可能不如经过实战测试的系统(如 NGINX)具有弹性。有关概述,请参阅 IAM Primer。
安全设计模式
反向代理还支持可以执行许多实用程序安全工作的插件,例如将安全 cookie 转换为访问令牌。所以它是架构中非常有用的部分。有关使用高级 LUA 编程语言的示例插件,请参阅 this article。
我有这样的设置:
- 用于身份和访问管理服务的 Keycloak OIDC 服务器 - 运行 在云端 - A
- 后端 RESTful 微服务 - 运行 云端 - B
- 后端 RESTful 微服务 - 运行 在多个位置的本地服务器中 - C
- 用户移动应用程序 - 多个用户跨位置 - X
- 用户 Web 应用程序 - 多个用户跨位置 - Y
- X, Y 使用 密码授予 访问 B - 即 X, Y 调用 login API of B 用户名和密码; B 从 Keycloak 获取访问令牌,然后发送它作为响应,他们 (X,Y) 使用它进一步 API 调用 B 获得授权。
现在,这是我的疑惑:
- 我们是否应该为 C 做同样的事情?即 B 中是否应该有一个 API 可用于 C 调用 post 客户端-id 和 client-secret (client-credentials grant),获取访问令牌?这是一个好的模式/有效的实施吗?
需要这种访问方式:
- Ops 团队正计划隐藏 A 以免暴露在互联网上。因此,B 将充当它的抽象层。
- 防止 IAM 服务暴露在互联网上是个好主意吗?我以前从未见过抽象的 IAM 服务。请澄清。
托管
通常的托管最佳做法是将身份系统置于反向代理/网关(例如 NGINX Plus)之后。这是因为身份系统连接到敏感数据源,而反向代理可以是入口点,例如在 DMZ 中。然后,您可以限制暴露在互联网上的 OIDC 端点。
避免将本地代理写入身份系统。因为这可能不如经过实战测试的系统(如 NGINX)具有弹性。有关概述,请参阅 IAM Primer。
安全设计模式
反向代理还支持可以执行许多实用程序安全工作的插件,例如将安全 cookie 转换为访问令牌。所以它是架构中非常有用的部分。有关使用高级 LUA 编程语言的示例插件,请参阅 this article。