【发布时间】:2019-12-27 18:38:14
【问题描述】:
我尝试使用 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;
但不提供任何杰克逊转换器从 String 传递到 UserManagedAccessConfig
如果没有设置这个配置属性,适配器只会拒绝每个请求。这个问题有什么解决方法吗?
【问题讨论】:
-
你有没有想过这个问题?我有同样的问题
标签: spring-boot oauth-2.0 authorization keycloak