使用 Visual Studio Code 搭建多用户远程 IDE
2022年9月7日 l101781 minutes
为 VS Code Web 版 code-server 增加外部认证,并支持多用户,不同用户的 code-server 实例完全隔离。
主要为了解决问题:
code-server 本身只支持配置文件形式的用户名密码认证(截止目前,以后也许会改进)。所以引入了外部认证系统,Google、GitHub、 okta、CAS、Keycloak 等理论上都是支持的。
code-server 默认没有数据隔离,所以又加了一层 auth proxy,为每个用户创建一个(或多个)code-server 实例,通过 proxy 代理到各自的实例,以实现用户间的数据隔离。
使用开源 Auth Proxy,无需自己编码即可实现认证授权流程,比如
code flow with pkce
对大部分人来说读懂这个协议都很困难。
此文档源码请参考:architecture-diagram
使用组件
Redhat 开源 IAM 系统,目前也是 CNCF 项目,提供用户、组织服务,提供标准 OIDC。
认证代理,配合 keycloak 提供完整 OAuth2 Code Flow 认证流程。也可以试试 pomerium ,看样子也不错。
架构图如下。
核心逻辑
架构图简单解读,所有过程官方文档都有详细说明,都是配置,以官方配置为准。
keycloak 创建 client,使用 OIDC 协议,作为 oauth2-proxy 的 provider。
ingress(nginx) 使用 auth_request 指令拦截所有请求,从 oauth2-proxy 进行代理认证,配置可参考 oauth2-proxy auth_request 指导。
认证通过后,将用户名/ID 作为标识,通过 Http Header (举例如 X-Forwarded-Preferred-Username) 传入 upstream。
gateway(nginx) 从 Header 中获取用户标识,代理到此用户对应的 code-server 实例。
code-server 各个实例部署时,以免认证方式部署。
每个 code-server 实例挂载不同的存储,实现完全隔离。