超级详细的 Docker Desktop 安装 Keycloak

news2024/11/25 6:11:00

一、Keycloak 简介

收先先來看一下Keycloak的基本資訊:

  • 名稱: Keycloak
  • 開發使用的程式語言: Java
  • 公用: 單點登入驗證與授權工具
  • 許可協議: Apache License 2.0
  • 公開倉庫: https://github.com/keycloak/keycloak
  • 官方網站: https://www.keycloak.org
  • 撰寫當下最新版本: 15.0.2 (2021年8月20日)

Keycloak是拿來做什麼的?

首先,他是一個單點登入(Single Sign On, SSO)系統服務。換句話說如果「快速開始」所展示的,他可以協助你驗證身份與管理會話(Session)。
除此之外,他可以嫁接許多現有的驗證系統,支援LDAP、keyberos。

在这里插入图片描述
此外支援多種社交登入(Social Login)。

在这里插入图片描述
以及支援多個標準協議,包含 OAuth 2.0 、 OpenID 和 saml 。 且支援授權服務。

在这里插入图片描述

關於Keycloak

起初會看到 Keycloak 是因爲,當時在思考一個授權設計的相關軟體開發問題。然後授權又與驗證不是那麼容易分開來看。
找著找著就發現Keycloak這蠻有去的玩具。雖然文件上有些過時,但功能齊全、更新更讓我意外。

2020年底、2021年初,剛接觸時才12版,一部分OAuth的Flow也沒有實現。半年才過去一些,現在不但有了,主板號更是直接跳到15版。

  • 2021年7月30 發佈 15.0.0 版
  • 2021年8月7日 發佈 15.0.1 版
  • 2021年8月20日 發佈 15.0.2 版

在这里插入图片描述

一、安装Docker

Docker Desktop 安装使用教程 点击查看

二、安装 KeyCloak

镜像地址: https://hub.docker.com/r/jboss/keycloak/

在这里插入图片描述

1、安装 jboss/keycloak 镜像

 docker pull jboss/kaycloak

在这里插入图片描述
在这里插入图片描述

2、启动 jboss/keycloak 镜像

参考启动命令 如下命令将启动一个新的容器,需要启动已有的容器,请使用 docker start 《container_id》

# jboss/keycloak 
docker run -p 8082:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak
​
# quay.io/keycloak  v19.0.1
docker run -p 9080:9080 -p 9443:9443 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -e KC_HTTP_PORT=9080 -e KC_HTTPS_PORT=9443 -d quay.io/keycloak/keycloak:19.0.1 start-dev 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

然后重新启动容器:

docker restart <CONTAINER>

在这里插入图片描述

在这里插入图片描述

三、使用 KeyCloak

1、访问 jboss/keycloak

  • 1、ping通server ip
  • 2、browser访问: http://127.0.0.1:8082/
  • 3、初始用户名和密码都是admin(启动时指定).

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、使用 jboss/keycloak

我们使用的时候需要创建一个realm,创建realm简单,设置一个名称即可。
点击左上角的 Master,在弹出下拉框中点击 Create Realm 按钮。
在这里插入图片描述
在这里插入图片描述

2.1、Realm公开配置

可以通过如下地址获取指定realm的openid配置
注意:keycloak:18.0.0之前的版本,url 需要添加 auth 路径

# kc 18.0.0
${KC_ADDR}/realms/${KC_REALM}/.well-known/openid-configuration

# before kc 18.0.0
${KC_ADDR}/auth/realms/${KC_REALM}/.well-known/openid-configuration

Example:http://127.0.0.1:8082/realms/MVNO/.well-known/openid-configuration
在这里插入图片描述

返回一个json数据,包括grant_types_supported等

2.2、Create Client

创建 Realm之后最重要的就是创建 Client ,不同类型的Client对 OAuth Grant Flow 支持有所差异。
主要配置和 Client Type 和 Client ID,前者决定授权方式,后者是后端程序配置连接地址时要配置。

在左侧菜单栏中选择Clients 选项卡。然后点击右侧的添加按钮。

在这里插入图片描述

输入客户端名称,然后点击保存。

在这里插入图片描述

然后,在添加成功后的跳转到的页面找到Valid Redirect URIs ,在这里将配置我们的spring boot 应用的网址。在本示例中,spring boot应用将会跑在8081端口上。所以地址应设置为http://localhost:8081。随后保存。

在这里插入图片描述

Client authentication: 如果打开,则client的access type为credentials,那么连接此client需要 client-secret参数;否则access type为public,不需要client-secret。
不同access type的client支持的Authentication flow有些差异。

Authentication flow:

  • Standard flow: oauth2 的 Authorization Code Flow。
  • Direct access grant: oauth2的 Password Flow。

在这里插入图片描述
创建client之后,需要配置一些参数,如“Valid redirect URIs ”等参数。
如果使用基于重定向的 Authentication flow,keycloak接收到redirect_uri参数时,检测其是否与当前client配置的 Valid redirect_uri 一致。不符合则会提示

在这里插入图片描述

Client secret

在这里插入图片描述

Advanced TAB

如配置access_token 存活时长等

在这里插入图片描述

2.3、Create Roles

在左侧菜单栏中选择Roles 选项卡。然后点击右侧的添加按钮。
   输入用户名,然后保存。

在这里插入图片描述

Create User

登录的用户来自这里;如果有额外的用户数据数据库,可以配置 User federation 。
注意:需要登录的用户需先在数据库中配置角色(前端无角色会报错)。
创建用户

1、 在左侧菜单栏中选择Users 选项卡。然后点击右侧的添加按钮。

在这里插入图片描述

2、输入用户名添加用户

在这里插入图片描述

3、添加成功后,单击Credentials 选项卡,设置登录密码。

在这里插入图片描述

4、添加成功后,单击Role Mappings 选项卡,给用户设置角色。

在这里插入图片描述

5、开启用户注册(可选)

在左侧菜单栏中选择Realm Settings 选项卡。然后按照如图所示进行操作。
   这样在KeyCloak的登录页面就会增加注册按钮。

在这里插入图片描述

四、Springboot 整合 KeyCloak

1、创建一个Spring Boot 应用

添加以下依赖

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.keycloak.bom</groupId>
            <artifactId>keycloak-adapter-bom</artifactId>
            <version>17.0.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-spring-boot-starter</artifactId>
        <version>17.0.1</version>
    </dependency>
   

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

2、Controller

@Controller
public class MyController {

    @GetMapping("/customers/he")
    @ResponseBody
    public Map he(Principal principal){
        Map<String, String> map = new HashMap<>();
        map.put("username",principal.getName());
        return map;
    }
    
}

3、SecurityConfig

@KeycloakConfiguration
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(
        AuthenticationManagerBuilder auth) throws Exception {

    KeycloakAuthenticationProvider keycloakAuthenticationProvider
            = keycloakAuthenticationProvider();
    keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(
            new SimpleAuthorityMapper());
    auth.authenticationProvider(keycloakAuthenticationProvider);
}

@Bean
@Override
protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
    return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    super.configure(http);
    http.authorizeRequests()
    //注意这句 这个user角色是我们在Keycloak中创建并分配给用户的, 只有用户拥有该role时,用户才能访问对应的资源
            .antMatchers("/customers/*").hasRole("user") 
            .anyRequest()
            .permitAll();
}

4、KeycloakConfig

@Configuration
public class KeycloakConfig {
    @Bean
	public KeycloakSpringBootConfigResolver keycloakConfigResolver() {
    	return new KeycloakSpringBootConfigResolver();
	}
}

5、application.yml

server:
  port: 8081 #与keycloak中配置的一致

keycloak:
  auth-server-url: http://localhost:8080  #KeyCloak地址
  realm: MyRealm  #realm名称
  resource: spring-app #client名称
  public-client: true
  principal-attribute: preferred_username
  ssl-required: external

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1289512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux环境下安装Nginx

Nginx&#xff08;发音&#xff1a;engine-x&#xff09;是一个高性能的HTTP和反向代理服务器&#xff0c;也可以作为邮件代理服务器使用。它是由俄罗斯程序员Igor Sysoev开发的&#xff0c;并在2004年公开发布。Nginx是一个开源项目&#xff0c;可以在Linux、Unix、BSD和Windo…

java--成员内部类、静态内部类、局部内部类

1.内部类 ①是类中的五大成分之一(成员变量、成员方法、构造器、内部类、代码块)&#xff0c;如果一个类定义另外一个类的内部&#xff0c;这个类就是内部类。 ②场景&#xff1a;当一个类的内部&#xff0c;包含了一个完整的事物&#xff0c;且这个事务没必要单独设计时&…

我们为什么那么关注 Java 中的 String Template ,Java 21 特性

本心、输入输出、结果 文章目录 我们为什么那么关注 Java 中的 String Template &#xff0c;Java 21 特性前言String TemplateString Template 有什么好处字符串连接 – 一个常见但无趣且容易出错的任务jetbrains IDEA 2023.2 版本及以上对于 String Template 的支持字符串模板…

今年圣诞爆款已出现!GMV稳定超越十万美刀,“装饰赛道”的爆单机会先到先得!

据统计&#xff0c;TiktTok平台圣诞节标签的流量已达40亿&#xff0c;且仍持续上涨。 流量驱动商品交易&#xff0c;转动短期生意增收飞轮。 在商品端&#xff0c;具有圣诞元素的服装、美妆、装饰类等商品频频热卖&#xff0c;仅仅一个小小的圣诞装饰信封&#xff0c;就在一个…

力扣 Java 101.对称二叉树

给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 提示&#xff1a; 树中节点数目在…

今天刷basic

一 在kali里边链接这个服务器 ssh -p 25199 rootnode4.buuoj.cn 然后回车 yes 输入密码123456 ls查看发现什么都没有&#xff0c;cd ..返回上一级目录 ls 发现有flag.txt 查看文件得到flag flag{477f20d3-acd3-46e1-b50a-633e58b769c7}

什么是 shell 脚本?

一、什么是 shell&#xff1f; Shell 是一个应用程序&#xff0c;它负责接收用户输入的命令&#xff0c;然后根据命令做出相应的动作&#xff0c; Shell 负责将应用层或者用户输入的命令传递给系统内核&#xff0c;由操作系统内核来完成相应的工作&#xff0c;然后将结果反馈给…

几何精度因子(Geometric Dilution Precision ,GDOP)

一、概念介绍 在卫星定位领域&#xff0c;精度衰减因子&#xff08;英语&#xff1a;Dilution of precision&#xff09;是一类衡量用户在进行GNSS测量时所具备的几何条件的定量指标&#xff0c;又简称为DOP值或精度因子。DOP值的大小取决各导航卫星在用户视场中的分布情况&am…

查收查引(通过文献检索开具论文收录或引用的检索证明)

开具论文收录证明的 专业术语为 查收查引&#xff0c;是高校图书馆、情报机构或信息服务机构提供的一项有偿服务。 因检索需要一定的时间&#xff0c;提交委托时请预留足够的检索时间。 一般需要提供&#xff1a;论文题目、作者、期刊名称、发表年代、卷期、页码。 目录 一、查…

逆向爬虫进阶实战:突破反爬虫机制,实现数据抓取

文章目录 一、引言二、逆向爬虫进阶技巧三、逆向爬虫进阶实战代码片段四、总结与展望好书推荐内容简介作者简介前言节选 一、引言 随着网络技术的发展&#xff0c;网站为了保护自己的数据和资源&#xff0c;纷纷采用了各种反爬虫机制。然而&#xff0c;逆向爬虫技术的出现&…

CSS进阶知识点3——定位装饰

一、回顾 网页常见布局方式&#xff1a;标准流、浮动和定位的相互配合。 1.1 标准流 a块级元素独占一行——>垂直布局 b行内元素/行内块元素&#xff08;一行显示多个&#xff09;——>水平布局 1.2 浮动 可以让原本垂直布局的块级元素变成水平布局 1.3 定位 1可以…

Python Collections库的高级功能详解

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python的collections库提供了一系列有用的数据类型&#xff0c;扩展了内建的数据类型&#xff0c;为开发者提供了更多高级功能。本文将深入探讨collections库的一些高级功能&#xff0c;通过详细的示例代码演示&…

Multidimensional Scaling(MDS多维缩放)算法及其应用

在这篇博客中&#xff0c;我将与大家分享在流形分析领域的一个非常重要的方法&#xff0c;即多维缩放MDS。整体来说&#xff0c;该方法提供了一种将内蕴距离映射到显性欧氏空间的计算&#xff0c;为非刚性形状分析提供了一种解决方案。当初就是因为读了Bronstein的相关工作【1】…

深信服技术认证“SCSA-S”划重点:XSS漏洞

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…

DOCBOX dynamiccontent.properties.xhtml RCE漏洞复现

0x01 产品简介 DOCBOX是一款具有恢复保证的文档管理系统,高效、快如闪电、防审核、简单,从模拟切换到数字并使用 DOCBOX 归档您的文档。 0x02 漏洞概述 DOCBOX电子文档管理系统4.2.0版本中dynamiccontent.properties.xhtml接口存在远程代码执行漏洞,未经身份认证的攻击者可…

前端:让一个div悬浮在另一个div之上

使用 CSS 的 position 属性和 z-index 属性 首先&#xff0c;将第二个 div 元素的 position 属性设为 relative 或 absolute。这样可以让该元素成为一个定位元素&#xff0c;使得后代元素可以相对于它进行定位。 然后&#xff0c;将要悬浮的 div 元素的 position 属性设为 ab…

【STM32】STM32学习笔记-课程简介(01)

00. 目录 文章目录 00. 目录01. 课程简介02. 硬件设备03. 软件工具04. 硬件套件4.1 面包板和跳线/飞线4.2 杜邦线和STM32最小系统板4.3 STLINK和OLED显示屏4.4 LED和按键4.5 电位器和蜂鸣器4.6 传感器和旋转编码器4.7 USB转串口和MPU60504.8 Flash闪存和电机模块4.9 SG90舵机 0…

【Java Web学习笔记】3 - JavaScript入门

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/javascript 零、JavaScript引出 JavaScript 教程 官方文档 1. JavaScript能改变HTML内容&#xff0c;能改变HTML属性&#xff0c;能改变HTML样式(CSS),能完成页面的数据验证。 <!DOCTYPE html>…

SM37 Cancel Logon of user DDIC in client 200 failed when starting a step

一、前言 在执行MDGIMG 调整了模型的映射的时候&#xff0c;需要在同一个环境的 不同Client分别创建一个SM37的后台Job&#xff0c;我在执行NWBC的时候报错&#xff0c;发现MDG创建物料的流程用不了&#xff0c;发现是SM37的Job被取消了&#xff0c;报错是 Logon of user DDI…

【一周安全资讯1202】信安标委发布《网络安全标准实践指南—网络安全产品互联互通 告警信息格式》;网络安全纳入注册会计师考试科目

要闻速览 1、信安标委发布《网络安全标准实践指南—网络安全产品互联互通 告警信息格式》 2、南昌某高校学生个人信息在境外公开出售&#xff0c;警方抓获学校"内鬼" 3、网络安全纳入注册会计师考试科目 4、乌克兰情报机构网攻俄罗斯民航局&#xff0c;称俄民航业正…