为Kubernetes中任意应用添加基于oauth2的认证保护 (上)

企业随着业务的发展,必然会部署各种各样的IT系统。出于安全性的考虑,一些系统仅可企业内部使用,甚至仅开放给企业部分部门员工使用。

这些IT系统大致可分为两类,

  1. 系统本身不支持任何认证机制,例如资讯或文档类系统。需要增加认证保护,能够限制非企业员工访问即可。系统运维通常的做法是,为站点设置HTTP Basic认证保护。由于HTTP Basic认证是通过预设的用户、密码认证,认证信息比较容易泄露。即使定期更换密码,但需要额外的机制通知用户密码的变更,用户体验也不好。
  2. 系统自身支持认证,甚至支持多种认证机制。比如最常用的开源CI/CD工具,Jenkins内置支持本地数据库认证、通过插件支持多种第三方系统集成认证。如果大量的IT系统都有一套独立的用户管理,随着企业的员工的变更,用户的增删等操作对系统管理员来说是不小的工作量。同时,也很容易由于人为疏忽,造成资产、数据的安全隐患。

假设企业自身已经有了一套OA系统包含员工、组织结构管理,例如,国内目前最为普及流行的钉钉企业微信。我们完全可以提供一套基于oauth 2.0协议的认证方式,让以上两类IT系统使用企业已有的OA系统(钉钉企业微信)来实现登录认证。做到这一点后,企业无论有多少IT系统都不再需要额外管理用户的成本,并且也避免了数据安全隐患。

钉钉通过钉钉开放平台提供的API开放了许多钉钉内部的能力,例如,身份验证通讯录管理等等。然而钉钉的三方网站登录接口并不是标准的oauth 2.0协议实现,我们需要通过一个oauth2 proxy代理工具实现将钉钉的三方网站登录兼容oauth2协议。同理,使用这个oauth2代理工具,可以使用GoogleFacebook等三方网站作为统一认证方式。

有了基于钉钉的oauth2代理作为企业统一登录方式,对于上面两大类系统的认证需求解决方案分别如下,

  1. 部署在Kubernetes中无内置认证机制的Web应用,通过nginx-ingress外部OAUTH认证实现基于oauth2的安全认证。
  2. Jenkins可以通过反向代理插件实现使用oauth2认证登录。

下篇中,我们将图文详解如何一步步实现为一个无认证的企业文档Web应用添加基于钉钉的统一认证

上一篇:Android中从源码分析关于AsyncTask的使用


下一篇:为Kubernetes中任意应用添加基于oauth2的认证保护 (下)