在上一节中,介绍了Keycloak的一些基本概念,从这一节开始,我们一起来实操一下。整个流程大致分为如下几步,并分布在Keycloak的系列章节中:
- 客户端之间访问Keycloak,通过预先设置好的用户名和密码换取token;
- 了解Spring Security,使用spring security的kecloak adapter将Keycloak集成进入spring,来保护一些endpoint;
- 通过Restful API在Keycloak中注册新用户;
- 如何使用Keycloak的multi-factor认证
- 使用Keycloak来集成三方登录;
安装启动
这一部分可以按照官方教程一步一步做就好:
从Keycloak下载Standalone server distribution的压缩包(当然也可以选择docker版本安装运行),解压后,在bin
目录下执行./standalone.sh
。该服务将启动在8080端口,不出意外的话,运行命令后可以直接访问 http://localhost:8080/auth,页面会提示去配置初始的管理员用户名和密码。
配置Realm
默认情况下,通过管理员身份登录后进入的realm为Master,client,user等信息不应该添加在Master这个realm中,添加新的realm更方便于后期的管理维护。添加方式如下图所示:
add realm.png
添加Client
接下来,添加一个client。一个client为Keycloak保护的一个server,在微服务架构下一个client就可以是一个client。切换到上一步创建好的realm,在右侧的菜单中选中Clients,再点击Create:
create client.png
填写一个Client ID,其余可以保持默认值即可。
添加测试用户
如下图所示,菜单栏中选中Users,再点击Add user,如下图所示:
add user.png
在表单内填入用户名,点击保存:
input username.png
会进入用户详情的配置页面,选中Credentials,进入配置密码的Tab,输入密码,同时关闭Temporary。Temporary通常用于管理添加用户后,给用户配置一个临时密码,当用户以用户名和这个临时密码登录时,会提示用户重置为自己的密码。
但此处的目的是通过Postman直接通过向Keycloak发送请求获取token,所以先关闭到Temporary这个开关。
input password.png通过Postman测试
到这里为止,Keycloak的最基本配置已经完成,使用Postman来测试一下,url为 http://localhost:8080/auth/realms/foodie/protocol/openid-connect/token
,path中realms之后的字符串foodie就是刚刚新增的realm。其余信息可参考下图:
通过该请求可获取token,格式如下所示:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJwbkpFanJSUWg1R2s1R3hVUm5HZldvY1hEYV9STERUYk93Ny1jMk00RjlNIn0.eyJqdGkiOiJkYzZiZjMxOC04YTliLTRlMTYtYTU3Ni0wN2ViZWVkNTk5MjQiLCJleHAiOjE1NzY5ODI0MjMsIm5iZiI6MCwiaWF0IjoxNTc2OTgyMTIzLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvZm9vZGllIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjA2N2E4NmIzLWE4ZDktNGE5OC05YzJhLTQxMDZkODFlNzhiNiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImZvb2RpZSIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImIyNGZkM2RlLTA0YWQtNDFjMi05YjI1LWY2NTM2ZjhmYWRmNyIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwicHJlZmVycmVkX3VzZXJuYW1lIjoidXNlcjEifQ.Q_VYHdszBcBRHXStUgEe95qy425BUVlXzk1kMdEx0Py40Aulvpbn-koXX_5s53jFDCEqNJXIADjRUvr-2T3rH9PVvuCeUdJMmKBjXjTbZqwrHucb55MtJDJ9QujB6J5DHKSSCNMlXIqjZ1xU5znIX4LuViYsjgfsA5p0R4_1Wtx8jddhq1nsDsAKUWpapTAO-PgjvHBF6OAAEl9gf2kjv9ssOWhVZ1V0_Ik_n6ASQWSa57utIvqYPxvin4HgUmN3X-7rsuXb0WeCOMScrhy6Ba-xG8UT-nkBXEy73wh3B7rbcaTciVA6QLgcq-pAbTMlouiJc2ukaeSdfyw9kge5pA",
"expires_in": 300,
"refresh_expires_in": 1800,
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0MzlmYWRhMS05MWY5LTRiYmEtYjViYi1mN2FlYzc1YTVhNTEifQ.eyJqdGkiOiI0ZDU3NzBlYS1jYzIyLTRlN2QtYjQyNC05NGM5MGFhNDVlYTEiLCJleHAiOjE1NzY5ODM5MjMsIm5iZiI6MCwiaWF0IjoxNTc2OTgyMTIzLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvZm9vZGllIiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL2Zvb2RpZSIsInN1YiI6IjA2N2E4NmIzLWE4ZDktNGE5OC05YzJhLTQxMDZkODFlNzhiNiIsInR5cCI6IlJlZnJlc2giLCJhenAiOiJmb29kaWUiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiJiMjRmZDNkZS0wNGFkLTQxYzItOWIyNS1mNjUzNmY4ZmFkZjciLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSJ9.IGu_ZfV2N9euHutVWTKj-GPcbz1a5ws2Ob7yYWuWwpM",
"token_type": "bearer",
"not-before-policy": 0,
"session_state": "b24fd3de-04ad-41c2-9b25-f6536f8fadf7",
"scope": "email profile"
}
此处的access_token和refresh_token均为JWT格式,可以使用jwt.io查看其中的信息。
网友评论