如何使用Keycloak保护Spring Cloud数据流服务器?

时间:2018-10-24 10:37:56

标签: spring-security spring-security-oauth2 keycloak spring-cloud-dataflow

我想使用keycloak作为身份验证和授权服务器来保护Spring Cloud数据流服务器并管理对其端点的访问。

我按照spring文档http://docs.spring.io/spring-cloud-dataflow/docs/1.7.0.RC1/reference/htmlsingle/#configuration-security-oauth2

中的说明设置了scdf服务器的yml。

因此,可以对在密钥斗篷中注册的用户进行身份验证。但是在keycloak中定义的授权规则不适用。原因似乎是春季文档中描述的原因:http://docs.spring.io/spring-cloud-dataflow/docs/1.7.0.RC1/reference/htmlsingle/#configuration-security-oauth2-authorization

我在这里提到的“自定义行为”有困难。到底必须做什么?如何提供所需的其他bean?使用keycloak作为Spring Cloud数据流的授权服务器还有其他解决方案吗?最新的spring security 5.1发行版是否对这个问题有影响?

我正在为此苦苦挣扎一段时间,希望对您有所帮助或反馈。预先谢谢你!

3 个答案:

答案 0 :(得分:1)

Spring Cloud Data Flow授权由Authorization Properties中设置的配置驱动,该配置具有SCDF中定义的前缀spring.cloud.dataflow.security.authorization

OAuth配置检索此授权配置以应用规则。 我不熟悉密钥斗篷规则。但是,SCDF仅允许基于HTTP的方法规则作为经过验证的here

只要您在其中设置了有效的规则,它们就会被应用到OAuth授权配置中。

答案 1 :(得分:1)

如果要自定义全局安全性角色,则需要按定义的here覆盖spring.cloud.dataflow.security.authorization.rules

如果要自定义每个登录用户的分配角色,则需要提供自己的AuthoritiesExtractor

例如:在 Spring Cloud Data Flow Cloud Foundry 实现中,我们对AuthoritiesExtractor进行了一些自定义。请查看CloudFoundryOAuthSecurityConfiguration。该配置设置了一个自定义 CloudFoundryDataflowAuthoritiesExtractor

答案 2 :(得分:0)

我正在尝试使用keycloak配置scdf2,但是我不知道该怎么做。

过程是

作为用户,我尝试登录scdf仪表板。

需要授权,并且可以重定向到密钥斗篷。

我正在尝试对redirect-uri使用不同的值:xxxxxx

scdf keycloak login

但是,当我输入正确的登录名和密码后,浏览器会进入搜索“ / login”的循环

其中配置为更改值的<< >>是指登录:

http://127.0.0.1:8080/auth/realms/scdf/protocol/openid-connect/auth?client_id=scdf_cli& << http:// localhost:9393 / login >>> &response_type = code&state = mdsNHe

我无法更改。 我需要做些更改吗?

安全性: 授权: 已启用:true        loginUrl:“ /”

配置安全性(Oauth 2):

        security:
          oauth2:
            client:
              client-id: scdf_cli
              client-secret: 271f58e7-a263-408f-aa91-9f6cdc8e78d4
              access-token-uri: http://127.0.0.1:8080/auth/realms/scdf/protocol/openid-connect/token
              user-authorization-uri: http://127.0.0.1:8080/auth/realms/scdf/protocol/openid-connect/auth
              redirect-uri-template: http://localhost:9393/
              redirect-uri: http://localhost:9393/dashboard
            resource:
              user-info-uri: http://127.0.0.1:8080/auth/realms/scdf/protocol/openid-connect/userinfo
              token-info-uri: http://127.0.0.1:8080/oauth/check_token

        spring:
          cloud:
            dataflow:
              security:
                authorization:
                  enabled: true
                  map-oauth-scopes: true
                  loginUrl: "http://localhost:9393/dashboard/#/login"      

      role-mappings:
        ROLE_CREATE: dataflow.create                            
        ROLE_DEPLOY: dataflow.deploy
        ROLE_DESTROY: dataflow.destoy
        ROLE_MANAGE: dataflow.manage
        ROLE_MODIFY: dataflow.modify
        ROLE_SCHEDULE: dataflow.schedule
        ROLE_VIEW: dataflow.view

        logging:
          level:
            root: DEBUG