keycloak
开源身份识别与访问管理系统keycloak
前言
Keycloak是一种面向现代应用和服务的开源IAM(身份识别与访问管理)解决方案,Keycloak提供了单点登录(SSO)功能,支持OpenID Connect
、OAuth 2.0
、SAML 2.0
标准协议,拥有简单易用的管理控制台,并提供对LDAP、Active Directory以及Github、Google等社交账号登录的支持,做到了非常简单的开箱即用。
快速开始
基本概念
realm
realm是最小项目单元,有独立的资源。
在Keycloak中,Access Type分为三种:
- Confidential:用于需要进行浏览器登录的应用,客户端会通过
client secret
获取access token
,多用于服务器渲染的 Web 系统中。 - Public: 针对需要进行浏览器登录的应用,多用于使用vue和react实现的前端项目。
- Bearer-only: 对于不需要浏览器登录的应用,只允许通过
bearer token
访问,多用于 RESTful API 场景。
准备工作
部署dev版
docker run -d --name keycloak -p 18080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:23.0.0 start-dev
进入后台创建quickstart realm
创建用户
用户行为可以配置一些信息,例如绑定OTP之类的操作,测试可以默认不选择
SPA应用集成
按以下文档运行spa demo
https://github.com/keycloak/keycloak-quickstarts/tree/latest/js/spa
访问如图所示
js初始化客户端
const keycloak = new Keycloak();
await keycloak.init({ scope: "phone", onLoad: "login-required" });
可以使用userinfo endpoints来验证token
curl http://127.0.0.1:18080/realms/quickstart/protocol/openid-connect/userinfo -H "Authorization: Bearer ${access_token}" -H "Content-Type: application/json"
返回
{
"sub": "7e72c240-ee74-439d-948e-6e3e1080bc1b",
"email_verified": false,
"preferred_username": "admin",
"email": "admin@test.com"
}
apisix集成
Admin Rest Api
使用keyloak-python来进行admin api的管理