开源认证和访问控制的利器keycloak使用简介

2024-02-24 16:18

本文主要是介绍开源认证和访问控制的利器keycloak使用简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 简介
  • 安装keycloak
  • 创建admin用户
  • 创建realm和普通用户
  • 使用keycloak来保护你的应用程序
    • 安装WildFly client adapter
    • 注册WildFly应用程序
    • 安装vanilla应用程序
  • 总结

简介

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 EnvironmentJBOSS_HOME: /Users/flydean/data/git/security/keycloak-11.0.2JAVA: /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/bin/javaJAVA_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 :

可以看到登录界面。点击登录。

先看下登录链接,自动跳转到了 http://localhost:8180/auth/realms/WildFly/protocol/openid-connect/auth?response_type=code&client_id=vanilla&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fvanilla%2Fprofile.jsp&state=8521b8ab-83f7-4fec-9ced-8c90a3d42839&login=true&scope=openid

这也就是keycloak登录域WildFly的登录界面,不过后面带上了redirect_uri参数,说明登录成功后,会跳转回vanilla程序的界面。

我们使用之前创建的用户名和密码登录看看。

登录成功。

总结

上面的例子我们演示了如何配置keycloak,并且创建一个realm供第三方程序使用。还举了一个无侵入的例子来和keycloak对接。

当然,有朋友会问了,vanilla程序是怎么和keycloak对接的呢?如果我们要写一个自己的程序,应该怎么做呢?

别急,细节我会在后面的文章进行分享,敬请期待。

本文作者:flydean程序那些事

本文链接:http://www.flydean.com/keycloak-startup/

本文来源:flydean的博客

欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

这篇关于开源认证和访问控制的利器keycloak使用简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/742654

相关文章

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用