统一身份认证系统
大家好,今天咱们来聊聊怎么用免费的方式搭建一个统一身份认证平台。你可能听说过“统一身份认证”,但具体是啥?简单来说,就是让一个账号能登录多个系统,不用重复输入用户名和密码。听起来是不是挺方便的?特别是对于开发人员或者企业来说,这玩意儿简直是刚需。
不过,很多人可能会觉得这个东西得花钱买,其实不然。现在有很多开源项目,可以让你免费搭建一个属于自己的统一身份认证平台。今天我就手把手教你怎么做,而且代码我也会贴出来,你只需要复制粘贴就能用。
什么是统一身份认证平台?
先说说什么是统一身份认证平台。它就像是一个中央控制器,负责管理用户的登录、权限、信息等。比如,你有一个网站、一个APP、还有一个后台管理系统,这三个系统都使用同一个账户登录,那就可以通过统一身份认证平台来实现。
举个例子,像一些大型公司,比如阿里、腾讯,他们肯定有自己的统一身份认证系统,这样用户在不同产品之间切换的时候,就不用反复登录了。这种系统不仅提升了用户体验,也提高了安全性。
但是,不是所有人都有资源去开发一个完整的系统。这时候,开源项目就派上用场了。我们可以利用现有的工具,快速搭建出一个功能齐全的统一身份认证平台。
为什么选择免费方案?
你可能会问:“为什么要用免费的?难道不安全吗?”这个问题问得好。确实,免费的东西有时候看起来不够专业,但其实很多开源项目已经非常成熟了。比如,OAuth、OpenID Connect这些协议,都是被广泛使用的标准。
而且,使用免费方案还能节省成本,尤其对初创公司或者个人开发者来说,这是一个非常好的起点。你可以先用免费的方案试水,等业务发展起来再考虑升级或定制。
另外,开源社区的活跃度也很高,遇到问题随时都能找到解决方案,甚至可以直接提Issue让开发者帮你解决。这也是免费方案的一大优势。
我们选哪个工具?
说到工具,我推荐的是 **Keycloak**。它是Red Hat旗下的一个开源身份和访问管理平台,功能非常强大,而且完全免费。Keycloak支持多种认证方式,包括OAuth 2.0、OpenID Connect、SAML等,非常适合做统一身份认证。
而且,Keycloak的安装也非常简单,可以运行在本地,也可以部署到云上。如果你是新手,也不用太担心,官方文档写得很详细,网上也有很多教程。
接下来,我就会一步步带你搭建一个Keycloak的实例,并且让它支持多系统登录。
环境准备
首先,你需要一台服务器或者本地电脑。如果是本地开发的话,建议用Docker,这样省事又方便。
然后,你需要安装Docker和Docker Compose。如果你还没装,可以参考下面的命令:
# 安装 Docker
sudo apt-get update
sudo apt-get install docker.io
# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
安装完成后,你可以用 `docker --version` 和 `docker-compose --version` 检查是否安装成功。
启动 Keycloak
接下来,我们用Docker来启动Keycloak。创建一个 `docker-compose.yml` 文件,内容如下:
version: '3'
services:
keycloak:
image: quay.io/keycloak/keycloak:latest
container_name: keycloak
ports:
- "8080:8080"
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=admin
- DB_VENDOR=POSTGRES
- DB_ADDR=localhost
- DB_DATABASE=keycloak
- DB_USER=keycloak
- DB_PASSWORD=keycloak
volumes:
- keycloak_data:/var/lib/keycloak
depends_on:
- postgres
postgres:
image: postgres:14
container_name: keycloak_postgres
environment:
- POSTGRES_USER=keycloak
- POSTGRES_PASSWORD=keycloak
- POSTGRES_DB=keycloak
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
volumes:
keycloak_data:
postgres_data:
保存为 `docker-compose.yml`,然后执行以下命令启动服务:
docker-compose up -d
等几分钟后,Keycloak 就会启动完成。你可以在浏览器中访问 `http://localhost:8080`,然后用用户名 `admin` 和密码 `admin` 登录。
配置 Keycloak

登录后,你会看到 Keycloak 的管理界面。我们需要做一些基础配置,比如创建 Realm(领域)、用户、角色等。
点击左侧菜单中的 **Realms**,然后点击 **Create Realm**,输入一个名字,比如 `myrealm`,然后点击 **Create**。
接着,进入这个 Realm 的设置页面,可以配置主题、登录页样式等。如果你只是测试用,这些都可以暂时忽略。
然后,我们创建一个用户。点击 **Users** -> **Add User**,填写用户名和密码,比如 `user1` 和 `password123`,然后保存。
之后,可以给这个用户分配角色。点击 **Roles** -> **Create Role**,比如创建一个 `user` 角色,然后回到用户页面,将该角色分配给用户。
到这里,我们的 Keycloak 基本配置完成了。现在,我们可以让它支持其他应用接入。
让其他应用接入 Keycloak
假设你现在有一个简单的 Web 应用,想要通过 Keycloak 进行身份认证。我们可以用 OAuth 2.0 来实现。
首先,在 Keycloak 中创建一个客户端。进入 Realm 页面,点击 **Clients** -> **Create**,输入客户端名称,比如 `myapp`,然后选择 **Client ID**,保持默认即可。
在 **Access Type** 里,选择 **confidential**,这样客户端会有密钥,更安全。然后在 **Valid Redirect URIs** 里添加你的应用地址,比如 `http://localhost:3000/callback`。
保存后,你会看到客户端的 Client ID 和 Client Secret,这两个值后面要用到。
现在,我们写一个简单的 Node.js 应用来演示如何使用 Keycloak 进行认证。
// app.js
const express = require('express');
const passport = require('passport');
const KeycloakStrategy = require('passport-keycloak').Strategy;
const app = express();
// 配置 Keycloak 策略
passport.use(new KeycloakStrategy({
realm: 'myrealm',
clientID: 'myapp',
clientSecret: 'your-client-secret', // 替换为实际的 Client Secret
authServerUrl: 'http://localhost:8080/auth',
}, (token, done) => {
return done(null, token);
}));
app.use(passport.initialize());
app.get('/login', passport.authenticate('keycloak'));
app.get('/callback', passport.authenticate('keycloak', { failureRedirect: '/login' }), (req, res) => {
res.send(`欢迎,${req.user.email}`);
});
app.listen(3000, () => {
console.log('应用运行在 http://localhost:3000');
});
当然,你需要先安装依赖:
npm install express passport passport-keycloak
然后运行 `node app.js`,访问 `http://localhost:3000/login`,就会跳转到 Keycloak 的登录页面。登录后,就能看到欢迎信息了。
总结一下
今天我们讲了怎么用 Keycloak 搭建一个统一身份认证平台,整个过程完全免费,而且代码也贴出来了。如果你是一个开发者,或者正在做一个项目,想要集中管理用户身份,那这个方法真的值得尝试。

虽然 Keycloak 功能强大,但它并不是唯一的选择。还有其他的开源工具,比如 **ORY Hydra**、**Auth0(免费版)** 等,也可以作为替代方案。不过,Keycloak 是一个非常成熟且功能全面的选项,特别适合需要自建系统的团队。
最后,提醒一下:虽然 Keycloak 是免费的,但在生产环境中,还是建议进行安全加固,比如使用 HTTPS、定期更新、备份数据等。毕竟,身份认证系统一旦出问题,后果很严重。
希望这篇文章对你有帮助!如果你有任何疑问,欢迎留言交流。我们下期再见!