第 3 章 使用带有 Spring Boot 的 Red Hat Single Sign-On

Red Hat Single Sign-On 客户端适配器是库,它非常容易使用 Red Hat Single Sign-On 来保护应用程序和服务。您可以使用 Keycloak Spring Boot 适配器来保护 Spring Boot 项目。

3.1. 在 Spring Boot Container 中使用 Red Hat Single Sign-On

要保护 Spring Boot 应用程序,请将 Keycloak Spring Boot 适配器 JAR 添加到您的项目中。Keycloak Spring Boot 适配器利用 Spring Boot 的自动配置功能,因此您需要做的都是将 Keycloak Spring Boot Start 添加到项目中。

流程

  1. 要手动添加 Keycloak Spring Boot starter,请将以下内容添加到项目的 pom.xml 中。

    <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-spring-boot-starter</artifactId>
    </dependency>
  2. 添加 Adapter BOM 依赖项。

    <dependencyManagement>
      <dependencies>
            <dependency>
              <groupId>org.keycloak.bom</groupId>
              <artifactId>keycloak-adapter-bom</artifactId>
              <version>3.4.17.Final-redhat-00001</version>
              <type>pom</type>
              <scope>import</scope>
            </dependency>
      </dependencies>
    </dependencyManagement>
  3. 将您的 Spring Boot 项目配置为使用 Keycloak。您可以使用正常的 Spring Boot 配置为 Spring Boot Keycloak 适配器配置域,而不是 keycloak.json 文件。例如,将以下配置添加到 src/main/resources/application.properties 文件中。

    keycloak.realm = demorealm
    keycloak.auth-server-url = http://127.0.0.1:8080/auth
    keycloak.ssl-required = external
    keycloak.resource = demoapp
    keycloak.credentials.secret = 11111111-1111-1111-1111-111111111111
    keycloak.use-resource-role-mappings = true

    您可以通过设置 keycloak.enabled = false 来禁用 Keycloak Spring Boot Adapter (例如在测试中)。要配置 Policy Enforcer,与 keycloak.json 不同,必须使用policy-enforcer-config 而不是只使用 policy-enforcer

  4. web.xml 中指定 Java EE 安全配置。Spring Boot Adapter 会将 login-method 设置为 KEYCLOAK,并在启动时配置 security- constraint。下面是一个示例配置。

    keycloak.securityConstraints[0].authRoles[0] = admin
    keycloak.securityConstraints[0].authRoles[1] = user
    keycloak.securityConstraints[0].securityCollections[0].name = insecure stuff
    keycloak.securityConstraints[0].securityCollections[0].patterns[0] = /insecure
    
    
    keycloak.securityConstraints[1].authRoles[0] = admin
    keycloak.securityConstraints[1].securityCollections[0].name = admin stuff
    keycloak.securityConstraints[1].securityCollections[0].patterns[0] = /admin

    注: 如果您计划将 Spring 应用程序部署为 WAR,则不要使用 Spring Boot Adapter。将专用适配器用于您正在使用的应用服务器或 servlet 容器。Spring Boot 也应包含 web.xml 文件。