gpt4 book ai didi

spring-boot - Keycloak springboot 适配器不允许设置 keycloak.policy-enforcer-config.user-managed-access 属性

转载 作者:行者123 更新时间:2023-12-05 07:20:08 47 4
gpt4 key购买 nike

我尝试使用 springboot 适配器保护我的应用程序。在深入研究源代码之后,我发现一些似乎是实现中的错误。

在 KeycloakAdapterPolicyEnforcer 类中,获取用户权限的方法 getPermissionTicket 包含:

private String getPermissionTicket(PathConfig pathConfig, PolicyEnforcerConfig.MethodConfig methodConfig, AuthzClient authzClient, OIDCHttpFacade httpFacade) {
if (getEnforcerConfig().getUserManagedAccess() != null) {
ProtectionResource protection = authzClient.protection();
PermissionResource permission = protection.permission();
PermissionRequest permissionRequest = new PermissionRequest();

permissionRequest.setResourceId(pathConfig.getId());
permissionRequest.setScopes(new HashSet<>(methodConfig.getScopes()));

Map<String, List<String>> claims = resolveClaims(pathConfig, httpFacade);

if (!claims.isEmpty()) {
permissionRequest.setClaims(claims);
}

return permission.create(permissionRequest).getTicket();
}

return null;
}

getEnforcerConfig().getUserManagedAccess() != null 如果您没有在 application.properties 中定义 keycloak.policy-enforcer-config.user-managed-access 属性,则始终为 null。

但我无法定义它,因为 PolicyEnforcerConfig 类将字段 userManagedAccess 定义为 UserManagedAccessConfig 对象

@JsonProperty("user-managed-access")
@JsonInclude(JsonInclude.Include.NON_NULL)
private UserManagedAccessConfig userManagedAccess;

但没有提供任何 jackson 转换器来将 String 传递给 UserManagedAccessConfig

如果不设置此配置属性,适配器只会拒绝所有请求。此问题有任何解决方法吗?

最佳答案

是的,我只是使用一个 bean 而不是属性文件。像这样:

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@EnableTransactionManagement
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

@Bean
@Primary
public KeycloakSpringBootProperties properties() {
final KeycloakSpringBootProperties props = new KeycloakSpringBootProperties();
final PolicyEnforcerConfig policyEnforcerConfig = new PolicyEnforcerConfig();
policyEnforcerConfig.setEnforcementMode(EnforcementMode.ENFORCING);
policyEnforcerConfig.setUserManagedAccess(new UserManagedAccessConfig());
props.setPolicyEnforcerConfig(policyEnforcerConfig);
return props;
}
}

关于spring-boot - Keycloak springboot 适配器不允许设置 keycloak.policy-enforcer-config.user-managed-access 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57609311/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com