搜索
首页Javajava教程Keycloak 和 Spring Boot:实现单点登录的终极指南

介绍:

单点登录 (SSO) 已成为现代 Web 应用程序的一项重要功能,可增强用户体验和安全性。这份综合指南将引导您完成使用 Keycloak 和 Spring Boot 实现 SSO,为您的应用程序提供强大的身份验证和授权解决方案。

SSO 与 Keycloak 的重要性

单点登录 (SSO) 对于简化身份验证流程、增强安全性和改善用户体验至关重要。以下是一些主要好处:

  1. 集中身份验证:SSO 允许用户进行一次身份验证并获得对多个应用程序的访问权限。 Keycloak 提供对用户身份的集中管理,这在具有大量应用程序的环境中非常有用。

  2. 提高安全性:通过集中身份管理,可以统一执行安全策略(如密码强度、双因素身份验证和帐户锁定策略)。 Keycloak 对 OpenID Connect 和 OAuth 2.0 等协议的支持确保了强大的现代安全标准。

  3. 减少密码疲劳并增强用户体验:通过仅登录一次,用户可以避免密码疲劳和多个凭据,从而使跨应用程序的交互更加顺畅和更快。

  4. 可扩展性和灵活性:Keycloak的配置可以支持大量用户和多个身份提供商,包括社交登录(Google、Facebook等)和企业目录(LDAP、Active Directory)。

  5. 自定义和可扩展性:Keycloak 允许自定义主题、登录流程和扩展,使其能够适应各种需求。它也是开源的,为组织提供了根据需要修改或扩展平台的灵活性。
    单点登录 (SSO) 的替代方案:

  6. 多重登录/传统身份验证:

    • 用户对每个应用程序或服务都有单独的凭据
    • 需要单独登录每个系统
    • 每个应用程序管理自己的身份验证
  7. 联合身份:

    • 与 SSO 类似,但允许跨不同组织进行身份验证
    • 使用 SAML 或 OpenID Connect 等标准
    • 用户的身份由其所属组织验证
  8. 多重身份验证 (MFA):

    • 除了用户名和密码之外还添加了额外的安全层
    • 可以与 SSO 或传统身份验证一起使用
    • 通常涉及您知道、拥有和正在的事物

单点登录流程说明:

在深入实施之前,让我们先了解 SSO 流程:

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

先决条件:

  • Java 17 或更高版本
  • Maven
  • Docker(用于运行 Keycloak)

第 1 步:项目设置

创建一个新的 Spring Boot 项目,其结构如下:

keycloak-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── bansikah/
│   │   │           └── keycloakdemo/
│   │   │               ├── config/
│   │   │               │   └── SecurityConfig.java
│   │   │               ├── controller/
│   │   │               │   └── FoodOrderingController.java
│   │   │               └── KeycloakDemoApplication.java
│   │   └── resources/
│   │       ├── templates/
│   │       │   ├── home.html
│   │       │   └── menu.html
│   │       └── application.yml
├── docker-compose.yml
└── pom.xml

注意:

bansikah 是我的名字吗?所以你可以把你的或者你想要的任何东西作为例子......

步骤2:配置pom.xml

将以下依赖项添加到您的 pom.xml 中,或者您可以仅替换依赖项部分以避免冲突:

<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.springframework.boot</groupid>
            <artifactid>spring-boot-starter-oauth2-client</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-oauth2-resource-server</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-thymeleaf</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-test</artifactid>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity3 -->
        <dependency>
            <groupid>org.thymeleaf.extras</groupid>
            <artifactid>thymeleaf-extras-springsecurity3</artifactid>
            <version>3.0.5.RELEASE</version>
        </dependency>
    </dependencies>

第 3 步:使用 Docker 设置 Keycloak

在根目录创建docker-compose.yml文件:

version: '3'

services:
  keycloak:
    image: quay.io/keycloak/keycloak:latest
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    ports:
      - "8088:8080"
    command:
      - start-dev

  app:
    build: .
    ports:
      - "8082:8082"
    depends_on:
      - keycloak

使用以下命令运行 Keycloak 服务器:

docker-compose up -d

第4步:配置Keycloak

  1. 访问 Keycloak 管理控制台:

    • 访问http://localhost:8088
    • 使用 admin/admin 作为用户名和密码登录
  2. 创建一个新领域:

    • 前往左上角的“大师”
    • 选择“添加领域”
    • 将其命名为食品订购领域
    • 点击“创建”
  3. 创建新客户端:
    在第一个屏幕上:

    • 将“客户端 ID”设置为“food-ordering-client”
    • 客户端类型:选择“OpenID Connect”
    • 点击“下一步”

在下一个屏幕上(功能配置):

  • 客户端身份验证:打开此选项(这将取代旧的“机密”设置)
  • 授权:除非您需要细粒度授权,否则可以将其关闭
  • 点击“下一步”
  1. 客户端配置:
    • 将根 URL 设置为 http://localhost:8082/
    • 将访问类型设置为机密
    • 添加有效的重定向 URI(每个 URI 占新行):
 http://localhost:8082/
 http://localhost:8082/menu
 http://localhost:8082/login/oauth2/code/keycloak
  • 设置网络来源: http://本地主机:8082
  • 点击“保存”

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

  1. 检索客户端密钥:
    • 转到“凭据”选项卡
    • 复制 Secret 字段的值以在应用程序配置中使用

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

  1. 创建用户:
    • 转到用户并单击“添加用户”
    • 设置用户名(例如 testuser)
    • 在“凭据”选项卡中:
      • 设置密码
      • 禁用“临时”

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On
并设置密码:

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

第5步:配置Spring Boot应用程序

在 src/main/resources 中创建 application.yml:

keycloak-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── bansikah/
│   │   │           └── keycloakdemo/
│   │   │               ├── config/
│   │   │               │   └── SecurityConfig.java
│   │   │               ├── controller/
│   │   │               │   └── FoodOrderingController.java
│   │   │               └── KeycloakDemoApplication.java
│   │   └── resources/
│   │       ├── templates/
│   │       │   ├── home.html
│   │       │   └── menu.html
│   │       └── application.yml
├── docker-compose.yml
└── pom.xml

替换从 Keycloak 复制的秘密,通常是一些随机文本。
注意:

在生产中或作为一个好的实践,最好将敏感信息保存在项目根目录的 .env 文件中,并将其用作配置中的变量,类似于 ${CLIENT_SECRET}当您启动应用程序时从 .env 文件中选择它,这也适用于重定向、发行者 uri 和其余内容..

第 6 步:创建安全配置

在 src/main/java/com/bansikah/keycloakdemo/config 中创建 SecurityConfig.java:

<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.springframework.boot</groupid>
            <artifactid>spring-boot-starter-oauth2-client</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-oauth2-resource-server</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-thymeleaf</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-test</artifactid>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity3 -->
        <dependency>
            <groupid>org.thymeleaf.extras</groupid>
            <artifactid>thymeleaf-extras-springsecurity3</artifactid>
            <version>3.0.5.RELEASE</version>
        </dependency>
    </dependencies>

第7步:创建控制器

在 src/main/java/com/bansikah/keycloakdemo/controller 中创建 FoodOrderingController.java:

version: '3'

services:
  keycloak:
    image: quay.io/keycloak/keycloak:latest
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    ports:
      - "8088:8080"
    command:
      - start-dev

  app:
    build: .
    ports:
      - "8082:8082"
    depends_on:
      - keycloak

第 8 步:创建 HTML 模板

在 src/main/resources/templates 中创建 home.html:

docker-compose up -d

在 src/main/resources/templates 中创建 menu.html:

 http://localhost:8082/
 http://localhost:8082/menu
 http://localhost:8082/login/oauth2/code/keycloak

第 9 步:运行应用程序

您应该能够通过此 URL http://localhost:8082 访问应用程序,并且您应该看到此

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On
当您单击此处链接时,您将进入 keycloak 表单,用户必须在 foodorder 领域下使用用户名和密码进行身份验证

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

通过身份验证后您将看到菜单页面

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

现在有了 SSO 的重要性,即使我注销,我也不必再次登录,如下

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On
然后我可以再次单击该链接,系统将不会提示我再次输入我的密码和用户名,如下所示

Keycloak and Spring Boot: The Ultimate Guide to Implementing Single Sign-On

结论

恭喜?,感谢您到目前为止的跟进
此实现演示了使用 Keycloak 和 Spring Boot 的强大 SSO 解决方案。它提供无缝的身份验证体验,同时保持安全性。该配置允许轻松定制和扩展,以满足特定的应用程序需求。
如果您遇到任何问题或对此实施有疑问,请随时在下面发表评论。请记得查看 Spring Security 和 Keycloak 文档以获取更高级的配置和功能。
github 上的代码链接

参考:

  • 春季靴
  • 钥匙斗篷
  • Java 17
  • Maven
  • 码头工人

以上是Keycloak 和 Spring Boot:实现单点登录的终极指南的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?Mar 17, 2025 pm 05:44 PM

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?Mar 17, 2025 pm 05:35 PM

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

如何在Java中实施功能编程技术?如何在Java中实施功能编程技术?Mar 11, 2025 pm 05:51 PM

本文使用lambda表达式,流API,方法参考和可选探索将功能编程集成到Java中。 它突出显示了通过简洁性和不变性改善代码可读性和可维护性等好处

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?Mar 17, 2025 pm 05:43 PM

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?Mar 17, 2025 pm 05:46 PM

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

如何将Java的Nio(新输入/输出)API用于非阻滞I/O?如何将Java的Nio(新输入/输出)API用于非阻滞I/O?Mar 11, 2025 pm 05:51 PM

本文使用选择器和频道使用单个线程有效地处理多个连接的Java的NIO API,用于非阻滞I/O。 它详细介绍了过程,好处(可伸缩性,性能)和潜在的陷阱(复杂性,

如何使用适当的版本控制和依赖项管理创建和使用自定义Java库(JAR文件)?如何使用适当的版本控制和依赖项管理创建和使用自定义Java库(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。

如何使用Java的插座API进行网络通信?如何使用Java的插座API进行网络通信?Mar 11, 2025 pm 05:53 PM

本文详细介绍了用于网络通信的Java的套接字API,涵盖了客户服务器设置,数据处理和关键考虑因素,例如资源管理,错误处理和安全性。 它还探索了性能优化技术,我

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具