我想使用keycloak作为身份验证和授权服务器来保护Spring Cloud数据流服务器并管理对其端点的访问。
中的说明设置了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发行版是否对这个问题有影响?
我正在为此苦苦挣扎一段时间,希望对您有所帮助或反馈。预先谢谢你!
答案 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
但是,当我输入正确的登录名和密码后,浏览器会进入搜索“ / 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