记录时间:2024.1.23
KEYCLOAK 23.0.4 单点登录配置
基础环境:
1、 Ubuntu 22.04
2、 docker 24.0.7
3、 keycloak 23.0.4
1. docker 启动 keycloak
// 启动 keycloak 在 8081 端口访问
// 设置管理员账号和密码都是 admin
docker run -p 8081:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:latest start
浏览器访问 http://localhost:8081
2. 设置 keycloak
2.1 新建领域 Realms
进入 keycloak 管理控制台,新建领域 Realms。Realms name 必填,其它默认。
2.2 新建客户端 Clients
新建 Client,Client ID必填,其它默认。
2.3 新建用户
新建用户,User name必填,设置密码。注意将更新密码的设置去掉。
上面新建密码的窗口中,注意关掉 Temporary,这与下面的去掉 Update Password 的设置作用一致。都是去掉更新密码,即用户下一次登录之前不需要先更新密码。
如果设置为更新密码,在用户更新/设置密码之前,将无法使用此账号和密码获取访问 token ,因为该帐户尚未“完全设置”并且处于某种状态中间状态,需要先修改密码才能登录。
访问 keycloak 的接口获取 token 时会报错:
{"error":"invalid_grant","error_description":"Account is not fully set up"}
3. 测试接口
使用接口调试工具,配置获取token的请求。
/realms/{realm-name}/protocol/openid-connect/token
由授权代码流用于将临时代码转换为令牌。
Request Method: POST
Request URL: http://localhost:8081/realms/itp/protocol/openid-connect/token
Request Body:
grant_type: password
client_id: mykkclient
username: username-xx
password: password-xx
响应结果
4. 从其它源访问
要从其它源(应用系统)集成 keycloak 进行登录时,需要修改 keycloak 的 client 设置。
例如:在 http://localhost:4400 有个应用A,用户名密码登录时,向 http://localhost:8081 的 keycloak 服务器发送登录请求,登录成功后,跳转到 http://localhost:4400/#/dashboard
keycloak 需要配置重定向的 URIs,可以使用通配符。需要配置 Web 源,允许来自源的跨域请求。