首页 > Java > java教程 > 正文

Keycloak 和 Spring Boot:实现单点登录的终极指南

Mary-Kate Olsen
发布: 2024-11-03 23:10:30
原创
411 人浏览过

介绍:

单点登录 (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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板