我试图使用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;
}
如果您没有在application.properties文件中定义keycloak.policy-enforcer-config.user-managed-access属性,则
getEnforcerConfig().getUserManagedAccess() != null
始终为null。但是,由于
PolicyEnforcerConfig
类将字段userManagedAccess定义为UserManagedAccessConfig对象,因此我无法定义它。@JsonProperty("user-managed-access")
@JsonInclude(JsonInclude.Include.NON_NULL)
private UserManagedAccessConfig userManagedAccess;
但是没有提供任何Jackson转换器,可以将String转换为UserManagedAccessConfig。
如果没有设置此配置属性,适配器将拒绝每个请求。有没有解决此问题的临时方法?