我尝试使用 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/