Spring Boot应用如何详细集成Keycloak认证?

2026-05-15 22:511阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2058个文字,预计阅读时间需要9分钟。

Spring Boot应用如何详细集成Keycloak认证?

目录+ 什么是Keycloak?+ 我们为什么要使用Keycloak?+ 在Spring Boot应用程序中使用Keycloak - 安装Keycloak - 添加应用程序 - 添加用户 - 创建Spring Boot应用程序 - 是否已使用Spring Security - 应用程序演示

目录
  • 正文
  • 什么是Keycloak?
    • 我们为什么要使用Keycloak?
  • 在Spring Boot 应用程序中使用keycloak
    • 安装Keycloak
    • 添加应用程序
    • 添加用户
  • 创建 Spring Boot 应用程序
    • 有没有使用Spring-Security
      • 应用程序演示
        • 认证流程
          • 结论

            正文

            在这篇文章中,我将展示如何在 Spring Boot 应用程序中使用 Keycloak。在我们使用 Keycloak 之前,我们将介绍一些关于 Keycloak 是什么以及我们为什么使用它的基础知识。

            要开始前,您需要具备以下条件:

            • 代码编辑器——IntelliJ
            • 数据库——MySQL
            • Keycloak
            • Java 8

            什么是Keycloak?

            Keycloak是一种用于现代应用程序和服务的开源身份和访问管理解决方案。Keycloak 同时提供 SAML 和 OpenID 协议解决方案。

            我们为什么要使用Keycloak?

            如前所述,Keycloak 提供身份和访问管理,它也是开源的。SAML 和 OpenID 协议是行业标准。构建与 Keycloak 集成的应用程序只会为您提供更安全和稳定的解决方案。当然还有其他可用的解决方案,如 Gluu、Shibboleth、WSO2。

            对于这篇文章,我们将使用 Keycloak。

            在Spring Boot 应用程序中使用keycloak

            这个演示有两个部分。一个是关于Keycloak。第二个是关于使用 Keycloak 保护 Spring Boot 应用程序。

            安装Keycloak

            在您的机器上下载Keycloak 。解压缩下载的文件并使用命令提示符下 bin 目录中的以下命令运行服务器(注意 – 我在 Windows 机器上):

            standalone.bat -Djboss.socket.binding.port-offset=100

            这将在本地计算机上为您的 Keycloak 启动 Wildfly 服务器。我们可以通过执行 URL 来访问服务器localhost:8180。如果您只是使用 standalone.bat 执行而没有该参数,则服务器将在端口上运行8080

            启动服务器后,您要做的第一件事就是创建一个管理员用户。我们将创建一个用户 admin 和密码 d#n3q2b 。

            现在我们将访问管理控制台并输入我们的用户详细信息。一旦我们以管理员用户身份登录,我们将看到如下第一个屏幕:

            添加应用程序

            初始屏幕显示默认领域。出于演示目的,我们将创建一个新领域SpringBootKeycloakApp。在这个领域中,我们将添加我们的 Spring Boot 应用程序作为客户端。在“客户端”选项卡上创建一个新客户端。我们将我们的客户端应用程序命名为 SpringBootApp。

            现在在设置中,我们将为我们的 Spring Boot 应用程序添加重定向 url。这是 Keycloak 将在身份验证后重定向到我们的应用程序的 URL。此外,我们使用 openid connect 作为协议作为此实现的一部分。

            添加用户

            现在我们将添加一个我们将用于身份验证的用户。我们将使用此用户登录到我们的示例 Spring Boot 应用程序。

            在 Keycloak 的角色选项卡上为该用户添加您想要的角色ROLE_User。完成后,让我们转到“用户”选项卡并添加一个新用户。

            在 Role Mappings 选项卡上,确保为该用户添加新创建的角色。

            创建 Spring Boot 应用程序

            现在,我们将创建一个简单的 Spring Boot 应用程序,它将使用 Keycloak 来确保安全。作为此应用程序的一部分,我们将为将通过应用程序进行身份验证的用户显示待办事项列表任务。

            要构建此应用程序,我们需要以下依赖项:

            dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.keycloak:keycloak-spring-boot-starter' runtimeOnly 'mysql:mysql-connector-java' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } testImplementation 'org.springframework.security:spring-security-test' }

            如您所见,我们正在使用spring-bootandspring-security以及keycloak-spring-boot-starter依赖项。

            keycloak 依赖项包括 Keycloak 客户端适配器。我们将使用这些适配器进行身份验证。它们将取代我们的标准 Spring Security 适配器。为了确保此keycloak-spring-boot-starter依赖项正常工作,我们需要在我们的 gradle 文件中添加一个依赖项,如下所示:

            dependencyManagement { imports { mavenBom "org.keycloak.bom:keycloak-adapter-bom:11.0.2" } }

            要了解更多相关信息,您可以访问keycloak的官方文档。

            我们的 Controller 类将有两个重要的方法,一个是获取任何人都可以访问的主页,另一个是获取任务列表,只有具有 ROLE_User 角色的经过身份验证的用户才能访问这些任务。此 TaskController 的代码如下所示:

            package com.betterjavacode.keycloakdemo.keycloakdemo.controllers; import com.betterjavacode.keycloakdemo.keycloakdemo.dto.TaskDto; import com.betterjavacode.keycloakdemo.keycloakdemo.managers.TaskManager; import org.keycloak.KeycloakSecurityContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import javax.servlet.localhost:8180/auth keycloak.realm=SpringBootKeycloakApp keycloak.resource=SpringBootApp keycloak.public-client=true keycloak.principal-attribute=preferred_username

            如果我们想在没有 Spring-Security 的情况下使用这个应用程序,我们还需要以下两个属性:

            keycloak.security-constraints[0].authRoles[0]=ROLE_User keycloak.security-constraints[0].securityCollections[0].patterns[0]=/tasks

            由于我们正在使用Spring-Security,所以我们将通过一个 Java 类来配置安全配置SecurityConfig

            这个 SecurityConfig 类将扩展KeyCloakWebSecurityConfigurerAdapter.

            我们的配置方法如下所示:

            @Override protected void configure(HttpSecurity localhost:8180上运行。我们的 Spring Boot 应用程序将在localhost:8080运行。

            我们的 Spring Boot 应用程序的第一个屏幕如下所示:

            Spring Boot应用如何详细集成Keycloak认证?

            现在,如果用户点击获取所有任务,他将被重定向到 Keycloak 登录屏幕,如下所示:

            现在,我将输入我的用户 betterjavacode 用户名和密码,它将向我们显示我们的任务列表,如下所示:

            认证流程

            当用户单击“获取所有任务”时,用户将被重定向到 Spring Security 的 sso/login 端点,KeycloakSpringBootConfigResolver 处理该端点并向 Keycloak 发送授权代码流请求

            localhost:8180/auth/realms/SpringBootKeycloakApp/protocol/openid-connect/auth?response_type=code&client_id=SpringBootApp&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fsso%2Flogin&state=70bd4e28-89e6-43b8-8bea-94c6d057a5cf&login=true&scope=openid

            Keycloak 将处理请求以响应会话代码并显示登录屏幕。

            一旦用户输入凭据并且 keycloak 验证了这些凭据,它将使用授权代码进行响应,并将此代码交换为令牌,然后用户登录。

            结论

            在这篇文章中,展示了如何使用 Keycloak 作为身份提供者来保护您的 Spring Boot 应用程序。这样 一个简单的程序就完成了!

            以上就是Spring Boot应用程序中如何使用Keycloak详解的详细内容,更多关于Spring Boot使用Keycloak的资料请关注自由互联其它相关文章!

            本文共计2058个文字,预计阅读时间需要9分钟。

            Spring Boot应用如何详细集成Keycloak认证?

            目录+ 什么是Keycloak?+ 我们为什么要使用Keycloak?+ 在Spring Boot应用程序中使用Keycloak - 安装Keycloak - 添加应用程序 - 添加用户 - 创建Spring Boot应用程序 - 是否已使用Spring Security - 应用程序演示

            目录
            • 正文
            • 什么是Keycloak?
              • 我们为什么要使用Keycloak?
            • 在Spring Boot 应用程序中使用keycloak
              • 安装Keycloak
              • 添加应用程序
              • 添加用户
            • 创建 Spring Boot 应用程序
              • 有没有使用Spring-Security
                • 应用程序演示
                  • 认证流程
                    • 结论

                      正文

                      在这篇文章中,我将展示如何在 Spring Boot 应用程序中使用 Keycloak。在我们使用 Keycloak 之前,我们将介绍一些关于 Keycloak 是什么以及我们为什么使用它的基础知识。

                      要开始前,您需要具备以下条件:

                      • 代码编辑器——IntelliJ
                      • 数据库——MySQL
                      • Keycloak
                      • Java 8

                      什么是Keycloak?

                      Keycloak是一种用于现代应用程序和服务的开源身份和访问管理解决方案。Keycloak 同时提供 SAML 和 OpenID 协议解决方案。

                      我们为什么要使用Keycloak?

                      如前所述,Keycloak 提供身份和访问管理,它也是开源的。SAML 和 OpenID 协议是行业标准。构建与 Keycloak 集成的应用程序只会为您提供更安全和稳定的解决方案。当然还有其他可用的解决方案,如 Gluu、Shibboleth、WSO2。

                      对于这篇文章,我们将使用 Keycloak。

                      在Spring Boot 应用程序中使用keycloak

                      这个演示有两个部分。一个是关于Keycloak。第二个是关于使用 Keycloak 保护 Spring Boot 应用程序。

                      安装Keycloak

                      在您的机器上下载Keycloak 。解压缩下载的文件并使用命令提示符下 bin 目录中的以下命令运行服务器(注意 – 我在 Windows 机器上):

                      standalone.bat -Djboss.socket.binding.port-offset=100

                      这将在本地计算机上为您的 Keycloak 启动 Wildfly 服务器。我们可以通过执行 URL 来访问服务器localhost:8180。如果您只是使用 standalone.bat 执行而没有该参数,则服务器将在端口上运行8080

                      启动服务器后,您要做的第一件事就是创建一个管理员用户。我们将创建一个用户 admin 和密码 d#n3q2b 。

                      现在我们将访问管理控制台并输入我们的用户详细信息。一旦我们以管理员用户身份登录,我们将看到如下第一个屏幕:

                      添加应用程序

                      初始屏幕显示默认领域。出于演示目的,我们将创建一个新领域SpringBootKeycloakApp。在这个领域中,我们将添加我们的 Spring Boot 应用程序作为客户端。在“客户端”选项卡上创建一个新客户端。我们将我们的客户端应用程序命名为 SpringBootApp。

                      现在在设置中,我们将为我们的 Spring Boot 应用程序添加重定向 url。这是 Keycloak 将在身份验证后重定向到我们的应用程序的 URL。此外,我们使用 openid connect 作为协议作为此实现的一部分。

                      添加用户

                      现在我们将添加一个我们将用于身份验证的用户。我们将使用此用户登录到我们的示例 Spring Boot 应用程序。

                      在 Keycloak 的角色选项卡上为该用户添加您想要的角色ROLE_User。完成后,让我们转到“用户”选项卡并添加一个新用户。

                      在 Role Mappings 选项卡上,确保为该用户添加新创建的角色。

                      创建 Spring Boot 应用程序

                      现在,我们将创建一个简单的 Spring Boot 应用程序,它将使用 Keycloak 来确保安全。作为此应用程序的一部分,我们将为将通过应用程序进行身份验证的用户显示待办事项列表任务。

                      要构建此应用程序,我们需要以下依赖项:

                      dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.keycloak:keycloak-spring-boot-starter' runtimeOnly 'mysql:mysql-connector-java' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } testImplementation 'org.springframework.security:spring-security-test' }

                      如您所见,我们正在使用spring-bootandspring-security以及keycloak-spring-boot-starter依赖项。

                      keycloak 依赖项包括 Keycloak 客户端适配器。我们将使用这些适配器进行身份验证。它们将取代我们的标准 Spring Security 适配器。为了确保此keycloak-spring-boot-starter依赖项正常工作,我们需要在我们的 gradle 文件中添加一个依赖项,如下所示:

                      dependencyManagement { imports { mavenBom "org.keycloak.bom:keycloak-adapter-bom:11.0.2" } }

                      要了解更多相关信息,您可以访问keycloak的官方文档。

                      我们的 Controller 类将有两个重要的方法,一个是获取任何人都可以访问的主页,另一个是获取任务列表,只有具有 ROLE_User 角色的经过身份验证的用户才能访问这些任务。此 TaskController 的代码如下所示:

                      package com.betterjavacode.keycloakdemo.keycloakdemo.controllers; import com.betterjavacode.keycloakdemo.keycloakdemo.dto.TaskDto; import com.betterjavacode.keycloakdemo.keycloakdemo.managers.TaskManager; import org.keycloak.KeycloakSecurityContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import javax.servlet.localhost:8180/auth keycloak.realm=SpringBootKeycloakApp keycloak.resource=SpringBootApp keycloak.public-client=true keycloak.principal-attribute=preferred_username

                      如果我们想在没有 Spring-Security 的情况下使用这个应用程序,我们还需要以下两个属性:

                      keycloak.security-constraints[0].authRoles[0]=ROLE_User keycloak.security-constraints[0].securityCollections[0].patterns[0]=/tasks

                      由于我们正在使用Spring-Security,所以我们将通过一个 Java 类来配置安全配置SecurityConfig

                      这个 SecurityConfig 类将扩展KeyCloakWebSecurityConfigurerAdapter.

                      我们的配置方法如下所示:

                      @Override protected void configure(HttpSecurity localhost:8180上运行。我们的 Spring Boot 应用程序将在localhost:8080运行。

                      我们的 Spring Boot 应用程序的第一个屏幕如下所示:

                      Spring Boot应用如何详细集成Keycloak认证?

                      现在,如果用户点击获取所有任务,他将被重定向到 Keycloak 登录屏幕,如下所示:

                      现在,我将输入我的用户 betterjavacode 用户名和密码,它将向我们显示我们的任务列表,如下所示:

                      认证流程

                      当用户单击“获取所有任务”时,用户将被重定向到 Spring Security 的 sso/login 端点,KeycloakSpringBootConfigResolver 处理该端点并向 Keycloak 发送授权代码流请求

                      localhost:8180/auth/realms/SpringBootKeycloakApp/protocol/openid-connect/auth?response_type=code&client_id=SpringBootApp&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fsso%2Flogin&state=70bd4e28-89e6-43b8-8bea-94c6d057a5cf&login=true&scope=openid

                      Keycloak 将处理请求以响应会话代码并显示登录屏幕。

                      一旦用户输入凭据并且 keycloak 验证了这些凭据,它将使用授权代码进行响应,并将此代码交换为令牌,然后用户登录。

                      结论

                      在这篇文章中,展示了如何使用 Keycloak 作为身份提供者来保护您的 Spring Boot 应用程序。这样 一个简单的程序就完成了!

                      以上就是Spring Boot应用程序中如何使用Keycloak详解的详细内容,更多关于Spring Boot使用Keycloak的资料请关注自由互联其它相关文章!