【问题标题】:Keycloak Integration with Spring BootKeycloak 与 Spring Boot 的集成
【发布时间】:2019-04-28 20:20:34
【问题描述】:

如何将 keycloak 与 Spring Boot 应用程序集成。我们是否必须在 application.properties 中授予所有资源及其角色权限?那么keycloak.json有什么用呢?然后我需要在 keycloak 的管理控制台中对这些导出设置进行一些说明。我们是否必须将该文件包含在应用程序的配置中?

【问题讨论】:

    标签: spring-boot keycloak


    【解决方案1】:

    1) 首先将这些依赖项添加到您的 build.gradle(我使用的是 gradle,但如果您是 Maven 人,pom.xml 也是一样的):

    // keycloak
    compile 'org.keycloak:keycloak-spring-boot-adapter:2.5.1.Final'
    compile 'org.keycloak:keycloak-tomcat8-adapter:2.5.1.Final'
    

    2) 然后在 application.properties 文件中提供您的 Keycloak 配置(此时您应该已经配置了您的领域并通过 Keycloak web-ui 添加了一个客户端):

    keycloak.realm=[YOUR-REALM]
    keycloak.bearer-only=true
    keycloak.auth-server-url=https://[YOUR-KEYCLOAK-INSTANCE-ADDRESS]:[PORT]/auth
    keycloak.ssl-required=external
    keycloak.resource=[CLIEND-ID]
    keycloak.credentials.secret=[YOUR-CLIENT-SECRET-ID]
    keycloak.cors=true
    
    
    keycloak.securityConstraints[0].securityCollections[0].name=insecure stuff
    keycloak.securityConstraints[0].securityCollections[0].patterns[0]=/test-endpoint-1/*
    
    keycloak.securityConstraints[1].securityCollections[0].name=admin stuff
    keycloak.securityConstraints[1].securityCollections[0].authRoles[0]=[ROLE-2]
    keycloak.securityConstraints[1].securityCollections[0].patterns[0]=/test-endpoint-2/*
    

    在这里,我允许任何人访问/test-endpoint-1/* 下的所有内容,而具有 [ROLE-2] 角色的管理员用户可以访问/test-endpoint-2/* 下的任何内容。

    啊,忘了说,客户端Access Typebearer-only。是的,使用此设置您不需要keycloak.json。 希望这会有所帮助:)

    更新

    新的 API 发生了一些变化,所以考虑到最新版本:

    kotlinVersion = '1.3.10'
    springBootVersion = '2.1.1.RELEASE'
    keycloakVersion = '4.6.0.Final'
    
    dependencyManagement {
        imports {
            mavenBom "org.keycloak.bom:keycloak-adapter-bom:${keycloakVersion}"
        }
    }
    
    dependencies {
        // keycloak
        compile 'org.keycloak:keycloak-spring-boot-starter'
    }
    

    application.properties 在这种情况下将如下所示:

    keycloak.realm=[YOUR-REALM]
    keycloak.bearer-only=true
    keycloak.auth-server-url=https://[YOUR-KEYCLOAK-INSTANCE-ADDRESS]:[PORT]/auth
    keycloak.ssl-required=external
    keycloak.resource=[CLIEND-ID]
    keycloak.credentials.secret=[YOUR-CLIENT-SECRET-ID]
    keycloak.cors=true
    keycloak.enabled=true
    
    keycloak.securityConstraints[0].securityCollections[0].name=insecure stuff
    keycloak.securityConstraints[0].securityCollections[0].patterns[0]=/test-endpoint-1/*
    
    
    keycloak.securityConstraints[1].securityCollections[0].name=admin stuff
    keycloak.securityConstraints[1].authRoles[0]=[ROLE-2]
    keycloak.securityConstraints[1].securityCollections[0].patterns[0]=/test-endpoint-2/*
    

    【讨论】:

    • 是的,它有帮助。不需要 keycloak.json。我如何为基于声明的政策推送 cliams?
    • 你是指角色吗?你能详细说明你想要达到的目标吗?
    • var context = $evaluation.getContext(); var 身份 = context.getIdentity(); var 属性 = identity.getAttributes(); if (identity.location=='mumbai') { $evaluation.grant(); }
    • 如何检查基于用户属性的策略?
    • 您可以使用 Keycloak 的 REST API。另一种选择是使用来自 Keycloak 的 Spring Security 提供程序并获取主体对象。
    【解决方案2】:

    如果添加了 spring-boot 适配器并且所有配置都在 application.properties 中进行,则不想添加 keycloak.json。keycloak 控制台中的导出用于导出所有这些角色、资源、策略和所有其他配置在控制台中。那只是导出该特定领域的设置。

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 2022-11-17
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 2016-12-20
      • 2022-07-24
      相关资源
      最近更新 更多