(本文由马哥教育学员技术分享)
如何实现企业应用系统的统一认证
痛点描述
1、多次登录带来的用户体验
在多数企业中,员工每天需要登录多个系统(如Grafana、Jumpserver、Jira、GitLab、Jenkins等),每个系统都有独立的用户名和密码。为了方便记忆,很多从往往使用相同的密码,这导致了更大的安全风险。
2、安全风险和管理挑战
为了确保企业数据安全,IT部门通常要求员工为每个系统设置不同的强密码。这加大了密码管理的复杂性,导致员工频繁的忘记密码。此外IT部门还面临着更高的运维成本和管理挑战,比如用户的身份验证、密码恢复、账号锁定等。
3、管理员负担
对于管理员来说,管理众多系统中的用户身份和权限变得异常复杂。企业需要频繁地管理用户的添加、删除和修改操作,尤其是员工入职、离职时,需要在每个系统中更新用户信息。这样不仅费时,还容易出错。
什么是单点登录(SSO)
系统单点登录(SSO,Single Sign-On)是一种身份认证技术,允许用户通过一次登录就能访问多个相互信任的系统,而无需在每个系统中重新输入用户名和密码。通过SSO,用户只需记住一个账户信息即可,无论是在内部系统还是外部应用,都能实现无缝访问。
工作原理
SSO的核心是建立一个统一的身份认证平台,当用户登录一个系统后,SSO平台将其认证信息传递给其他受信任的系统。当用户访问其他系统时,这些系统会通过SSO平台的验证,允许用户直接访问而无需再次登录。
常见的SSO协议
OAuth2.0:常用于Web应用中的授权协议,允许第三方应用请求用户的某些权限。
SAML 2:常用于企业级系统之间的身份认证协议,基于XML传递身份信息,更安全。
OIDC:OAuth2.0的扩展,用于用户身份验证,适合Web和移动应用。
CAS:企业级单点登录协议,常用于高校或大型企业。
单点登录优势
1、提高用户体验
SSO大大减少了员工在不同系统之间重复登录的麻烦,用户只需登录一次即可访问所有授权的系统。这不仅提高了员工的工作效率,还减少了忘记密码和频繁重置密码的情况。
2、增强安全性
SSO通过集中化的身份验证和强大的认证策略,可以大幅提升企业的安全性。它支持多因素认证(MFA)来确保用户身份的真实性。此外,由于减少了系统间的重复登录,暴露的登录点也更少,降低了黑客攻击的风险。
3、降低IT运维成本
IT管理员只需在一个集中化的系统中管理用户权限,极大减少了管理多个系统的工作量。员工的身份信息可以在多个系统中自动同步,避免了手动更新权限的复杂操作。对于员工入职、离职等情况,也能迅速处理用户的访问权限,提升管理效率。
解决方案
现分享一个开源的单点登录系统,基于Golang、Vue前后端分离设计,项目地址:https://github.com/yuyan075500/ops-api。
功能概览
1、用户认证方式
用户来源支持Windows AD和OpenLDAP,此外用户可以通过钉钉、企业微信、飞书扫码认证。
2、协议
支持CAS3.0、OAuth2.0、SAM2和OIDC。
3、安全性
支持MFA(双因素认证),可以使用使用Google Authenticator、阿里云APP和华为云APP扫描获取动态验证码的试。
4、运维成本
支持用户自助进行密码和更改,统一密码更改入口,对密码进行强管控,无需要管理员参与。
项目部署
你只需要准备一台2核4G的Linux服务器,并部署好Docker和Docker Componse就可以5分钟快速拥有一套单点登录系统。
1、克隆项目
git clone https://github.com/yuyan075500/ops-api.git
2、切换工作目录
cd ops-api/deploy/docker-compose
3、环境变量配置
修改.env文件中环境变量,如果使用docker-compose.yaml中指定的MySQL、Redis、MinIO,则可以跳过此步骤。
注意:.env中定义的Minio的accessKey和secretKey需要在部署成功后登录进MinIO控制台手动创建
4、项目配置
修改conf/config.yaml文件中相关配置,将externalUrl修改为此系统实际的访问地址即可。其它配置说明可以参考《官方文档》
5、创建证书
如果是测试环境可以路过此步骤,创建证书参考《官方文档》,证书创建完成后需要将证书复制到certs目录中。
6、创建数据目录
需要手动创建Minio数据目录
mkdir -p data/minio
cd ops-api/deploy/docker-compose
7、执行部署
docker-compose up -d
8、数据初始化
将deploy/data.sql文件中的SQL导入到MySQL数据库。
9、系统登录
部署完成后,系统会自动创建一个超级用户,此用户不受权限控制。用户名为:admin,密码为:admin@123...
关于更详细的部署文档参考《官方文档》。
(以上为马哥教育学员-技术分享)
文末福利一
最近有很多朋友都在学习go,于是给大家分享一份超级牛掰的go学习资料合集,包含go语言入门笔记、web框架开发、go语言面试题和实战项目视频合集!大家有需要的尽管收藏起来!
完整资料领取看这里
文末福利二
1分购五重豪礼
K8S从入门到实战专题课(12小时)
14353页Linux学习笔记
937页K8S学习笔记
web安全学习笔记
570个Linux命令大全