开源认证和访问控制的利器keycloak使用简介
简介
keycloak是一个开源的进行身份认证和访问控制的软件。是由Red Hat基金会开发的,我们可以使用keycloak方便的向应用程序和安全服务添加身份认证,非常的方便。
keycloak还支持一些高级的特性,比如身份代理,社交登录等等。
本文将会带领大家进入keycloak的神秘世界。
安装keycloak
keycloak有很多种安装模式,这里我们先介绍最简单的standalone模式。
要安装keycloak,我们需要下载keycloak的zip包。在我写这篇文章的时候,keycloak的最新版本是11.0.2。
下载链接如下: https://downloads.jboss.org/keycloak/11.0.2/keycloak-11.0.2.zip
下载完毕,解压,
cd bin
./standalone.sh
我们可以简单的挑选一些启动日志来分析一下:
=========================================================================
JBoss Bootstrap Environment
JBOSS_HOME: /Users/flydean/data/git/security/keycloak-11.0.2
JAVA: /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/bin/java
JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
=========================================================================
22:08:04,231 INFO [org.jboss.modules] (main) JBoss Modules version 1.10.1.Final
22:08:08,706 INFO [org.jboss.msc] (main) JBoss MSC version 1.4.11.Final
22:08:08,721 INFO [org.jboss.threads] (main) JBoss Threads version 2.3.3.Final
22:08:08,921 INFO [org.jboss.as] (MSC service thread 1-2) WFLYSRV0049: Keycloak 11.0.2 (WildFly Core 12.0.3.Final) starting
可以看到keycloak底层实际上使用的是WildFly服务器,WildFly服务器的前身就是JBoss,也是由red hat主导的。所以keycloak使用WildFly还是很合理的。
当我们看到下面的日志的时候,就意味着keycloak启动好了。
22:08:26,436 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
22:08:26,437 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
接下来,我们需要为keycloak创建admin用户。
创建admin用户
启动好keycloak之后,我们就可以登录到web页面 http://localhost:8080/auth 创建admin用户了。

这是创建用户的界面,我们输入用户名和密码,点击create,就可以创建admin用户了。
创建完admin用户,点击登录到admin console,就会跳转到admin console的登录页面 http://localhost:8080/auth/admin/
输入用户名密码,点击登录。

然后就进入到了管理界面:

可以看到管理界面提供的功能还是非常丰富的。
我们可以对realm,clients,roles,identity providers,user federation,authentication等进行配置和定义。
还可以对groups,users,sessions,events等进行管理,非常强大和方便。
创建realm和普通用户
realm翻译成中文就是域,我们可以将它看做是一个隔离的空间,在realm中我们可以创建users和applications。
keycloak中有两种realm空间,一种是Master realm,一种是Other realms。

master realm是指我们使用admin用户登录进来的realm空间,这个realm只是用来创建其他realm的。
other realms是由master realm来创建的,admin可以创建users和applications,而这些applications是由users所有的。
点击add realm按钮,我们进入add realm界面,输入realm的名字,就可以创建realm了。

上面的例子中,我们创建了一个叫做WildFly的realm。
接下来,我们为WildFly创建新的user:

输入用户名,点击save。
选择新创建user的credentials页面,输入要创建的密码,点击set password,那么新创建用户的密码则创建完毕。

接下来,我们使用新创建的用户flydean来登录realm WildFly,登录url如下:
http://localhost:8080/auth/realms/WildFly/account
输入用户名和密码,进入用户管理页面:

我们将用户所需要的资料填充完毕,以供后面使用。
使用keycloak来保护你的应用程序
因为keycloak底层使用的是WildFly,为了简单起见,这里我们也使用keycloak来保护一个WildFly程序。
我从WildFly的官网下载最新版本的WildFly,然后解压备用。
因为keycloak和WildFly都是在同一台机子上面启用。所以默认情况下端口都是一样的8080。
接下来,我们需要修改一下keycloak的端口,以避免端口冲突。
cd bin
./standalone.sh -Djboss.socket.binding.port-offset=100
我们重启一下keycloak,在启动命令中添加了jboss.socket.binding.port-offset,这个是相对于标准端口的偏移量。
比如之前我们的端口是8080,那么现在端口就是8180。
看一下,现在的管理页面链接是不是变到了 http://localhost:8180/auth/admin/ 。
安装WildFly client adapter
为了无缝集成WildFly,keycloak提供了多种adapter供我们使用:

可以看到除了WildFly,keycloak还可以支持Jetty和Tomcat,我们可以在后面的文章中来讲解如何集成keycloak到Jetty和Tomcat。
同时,client Adapters还有两种协议格式,openid connect和SAML 2.0,我们也会在后面的文章中具体介绍一下这两种协议,敬请期待。
好了,先下载WildFly adapter,将adapter放到WildFly的跟目录下面:
server/wildfly-20.0.1.Final : ls
LICENSE.txt bin domain modules
README.txt copyright.txt jboss-modules.jar standalone
appclient docs keycloak-wildfly-adapter-dist-11.0.2.zip welcome-content
解压adapter,解压之后,进入wildfly-20.0.1.Final/bin目录,运行:
./jboss-cli.sh --file=adapter-elytron-install-offline.cli
如果你得到下面的输出结果:
{"outcome" => "success"}
{"outcome" => "success"}
{"outcome" => "success"}
{"outcome" => "success"}
那就说明adapter安装成功了,这个脚本会修改…/standalone/configuration/standalone.xml。
然后我们可以启动WildFly了:
./standalone.sh
注册WildFly应用程序
回到我们的admin console: http://localhost:8180/auth/admin/
选择我们之前创建的realm:WildFly,在clients选项中,我们创建新的client:

创建完成之后,我们进入到installation tab:

选择keycloak OIDC JSON,点击Download,下载keycloak.json文件。
然后选择Keycloak OIDC JBoss Subsystem XML,点击下载,下载keycloak-oidc-subsystem.xml文件。
接下来,我们需要修改WildFly配置信息。
进入WildFly的standalone/configuration目录,修改standalone.xml文件如下:
<subsystem xmlns="urn:jboss:domain:keycloak:1.1">
<secure-deployment name="vanilla.war">
<realm>WildFly</realm>
<auth-server-url>http://localhost:8180/auth/</auth-server-url>
<public-client>true</public-client>
<ssl-required>EXTERNAL</ssl-required>
<resource>vanilla</resource>
</secure-deployment>
</subsystem>
这个subsystem的内容实际上就是我们刚刚保存的keycloak-oidc-subsystem.xml里面的内容。
这里我们需要知道secure-deployment的war名字,也就是我们接下来将要部署的应用程序的名字。
重启WildFly。
安装vanilla应用程序
为了简单起见,我们直接从 https://github.com/keycloak/keycloak-quickstarts 中下载示例代码项目 app-profile-jee-vanilla。
git clone https://github.com/keycloak/keycloak-quickstarts
cd keycloak-quickstarts/app-profile-jee-vanilla/config
将刚刚下载的keycloak.json拷贝到当前目录。
然后切换到keycloak-quickstarts父目录,执行:
mvn clean wildfly:deploy
这个命令将会打包成为适合WildFly执行的war包,也就是我们要的vanilla.war。
将打包好的vanilla.war拷贝到WildFly目录下的standalone/deployments。
WildFly会自动重新部署该应用程序。
这时候我们访问下应用程序 http://localhost:8080/vanilla :

可以看到登录界面。点击登录。
这也就是keycloak登录域WildFly的登录界面,不过后面带上了redirect_uri参数,说明登录成功后,会跳转回vanilla程序的界面。
我们使用之前创建的用户名和密码登录看看。

登录成功。
总结
上面的例子我们演示了如何配置keycloak,并且创建一个realm供第三方程序使用。还举了一个无侵入的例子来和keycloak对接。
当然,有朋友会问了,vanilla程序是怎么和keycloak对接的呢?如果我们要写一个自己的程序,应该怎么做呢?
别急,细节我会在后面的文章进行分享,敬请期待。
本文作者:flydean程序那些事
本文链接:http://www.flydean.com/keycloak-startup/
本文来源:flydean的博客
欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
开源认证和访问控制的利器keycloak使用简介的更多相关文章
- 8.k8s.认证与访问控制
#K8S认证与访问控制(RBAC) 用户证书创建 #k8s认证 #主要认证 方式 http token.https证书 k8s不提供用户管理,API Server把客户端证书的CN字段作为User,把 ...
- 我的世界 ParaCraft 结合开源地图 OpenStreetMap 生成3D校园的方法简介
我的世界ParaCraft结合开源地图OpenStreetMap生成3D校园的方法简介 版本1.0 日期2019.2.3 作者Ray (82735589@qq.com) www.TimeGIS.com ...
- Security - 轻量级Java身份认证、访问控制安全框架
前言 此框架由小菜独立开发,并且已经在生产环境中运行大约一年时间. 也就是说,Security 框架写出来有一段时间了,但是一直没有公布.开源,经过不断迭代完善,终于算是拿得出手啦~ Security ...
- 开源认证组件汇总 Kerberos和CAS
一.Kerberos 1.Kerberos原理和工作机制 概述:Kerberos的工作围绕着票据展开,票据类似于人的驾驶证,驾驶证标识了人的信息,以及其可以驾驶的车辆等级. 1.1 客户机初始验证 ...
- 重磅开源|AOP for Flutter开发利器——AspectD
https://github.com/alibaba-flutter/aspectd 问题背景 随着Flutter这一框架的快速发展,有越来越多的业务开始使用Flutter来重构或新建其产品.但在我们 ...
- 阿里开源线上应用调试利器 Arthas的背后
Arthas是一个功能非常强大的诊断工具,功能点很多,例如:jvm信息.线程信息.搜索类中的方法.跟踪代码执行.观测方法的入参和返回参数等等. 作为有追求的程序员,你不仅要知道它能做什么,更要思考它是 ...
- <Android开源库 ~ 1> GitHub Android Libraries Top 100 简介
转载自GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitH ...
- 开源的API文档工具框架——Swagger简介
初次接触Swagger是在2017年5月,当时公司正好要对整套系统架构进行重新设计,有同事推荐用这个技术框架来规范后台接口的API文档.当时因为架构重构,涉及改造的技术点太多,一时也就没太多精力,把S ...
- 进程管理利器Supervisor--入门简介
目录 概述 Supervisor是什么 Supervisor意图 Supervisor特性 Supervisor组件 平台需求 概述 项目运行需要后台运行,一般都是使用 nohup,但是nohup不能 ...
随机推荐
- Scala 特殊符号含义
date: 2019-08-01 11:15:27 updated: 2019-08-22 15:22:32 Scala 特殊符号含义 参考地址 1. ::: :::(三个冒号)只用于连接两个 Lis ...
- day05 selenium基本使用
本文通过举例介绍selenium的基本使用方法,用来爬取京东笔记本电脑的商品信息,包括名称,url,价格,评价信息. from selenium import webdriver # 导入键盘Keys ...
- 双非本科拿到阿里腾讯字节,分享Java后端路线
前言 最近有很多小师妹来问我. 师妹:师兄~看了你之前的从腾讯到阿里,最后选择字节,觉得你特别厉害,请问你是怎么进BAT的呀,能不能告诉我你的学习路线呀~ 既然小师妹都这么问了,那我在这篇就如实回答她 ...
- viewpage启动页
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com ...
- HP UNIX 查看 修改IP地址
# 查看所有IP地址h01_root[/]# lanscan Hardware Station Crd Hdw Net-Interface NM MAC HP-DLPI DLPI Path Addre ...
- 4G模块是什么 4G模块的工作原理
4G模块是什么 4G模块,又叫4G传输模块.4G通信模块.4G LTE模块.它是一种硬件加载到指定频段,软件支持标准的LTE协议,且软硬件高度集成模组化的产品,具有兼容性好.通信速度快.通信数据量大. ...
- python之冒泡排序改进
冒泡排序改进 关注公众号"轻松学编程"了解更多. 一.普通冒泡排序 [22,3,1,6,7,8,2,5] 普通冒泡排序 思路: 第一趟排序 从下标0开始,取出对应的值22 22和3 ...
- node+express如何接收fromData
使用express-formidable来进行解析 安装 express-formidable npm install express-formidable 在app.js里放入已下代码 const ...
- 利用ms08_067入侵window xp sp1(English)版本
前几天上课,老师搬出实验,自己体验了一下 1.环境配置 需要准备kali(攻击机),window xp (我这里是sp1 英文版本,标题很清楚了),攻击机和目标靶机要在同意网段下我的kali(192. ...
- 分布式文档存储数据库之MongoDB副本集
前文我们聊到了mongodb的索引的相关作用和介绍以及索引的管理,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13950287.html:今天我们来聊下mon ...