【问题标题】:Quarkus and Keycloak: evaluate scope based permissionQuarkus 和 Keycloak:评估基于范围的权限
【发布时间】:2020-04-11 01:51:16
【问题描述】:

我有一个 REST API,它应该使用 Keycloak 来授权传入请求。我在我的 API 中配置所需范围时遇到问题。
在 Keycloak 中,我为我的 API 定义了一个客户端、一个用于调用服务的客户端和两个用户。两个用户都有一些领域角色。我的 API 的客户端定义了一个资源、一些范围(例如读取、删除)、策略和权限。 一种权限允许具有管理员角色的用户对资源执行范围读取和删除。另一个允许具有监视角色的用户读取资源。
我了解我的端点路径将根据 Keycloak 客户端资源中定义的路径进行检查。

我的具体问题是我不知道如何告诉我的端点,他需要哪些范围。

最后我希望有多个端点具有相同的路径但不同的范围(对于每个 HTTP 方法)。

这是我的示例配置:

quarkus.http.port=8080
quarkus.resteasy.path=/api
quarkus.oidc.auth-server-url=https://myUrl:8443/auth/realms/enaq
quarkus.oidc.client-id=rest-api
quarkus.oidc.credentials.secret=secret-string
quarkus.oidc.enabled=true
quarkus.application.name=keycloak-test-api
quarkus.application.version=0.0.1
quarkus.keycloak.policy-enforcer.enable=true

这是一个示例实现:

@Path("/measurements")
public class MeasurementResource {

    @Autowired
    MeasurementService delegate;

    @GET
    @Path("/{id}/{from}/{to}/{resolution}")
    @Produces(MediaType.APPLICATION_JSON)
    public MeasurementHistory getMeasurementHistory(@PathParam("id") String deviceId, @PathParam("from") Long from,
            @PathParam("to") Long to, @PathParam("resolution") Integer resolution) {
        return delegate.getMeasurementHistory(from, to, resolution, deviceId);
    }
}

在我的示例中,我的权限将被评估,但只有管理员可以访问。监控用户将被拒绝,尽管他应该能够阅读。

【问题讨论】:

    标签: java keycloak quarkus


    【解决方案1】:

    为了定义应该保护的确切范围并将它们映射到适当的 HTTP 动词,您应该按照文档中的 here 配置策略实施器。

    Quarkus 方面还没有文档说明如何将其映射到属性 (application.properties),但这样做应该很简单。您可以从here 获取示例。

    另一个选项是设置quarkus.keycloak.policy-enforcer.http-method-as-scope=true。通过这样做,您的资源将与 GET、POST、DELETE 等范围相关联。策略执行器将相应地强制访问,而不会强制您在配置文件中映射路径。

    【讨论】:

    • 您是否尝试将@RolesAllowed("your-role") 添加到您的端点?
    • @iabughosh 我在 keycloak 中定义了策略和权限。 Keycloak 应该检查一个角色是否被允许访问一个资源。因此我不会使用注释。
    • 感谢您的方法佩德罗。我最喜欢第二个,但实际上我对那个有问题。我不知道设置范围需要什么属性。顺便说一句,该链接对其他配置也很有帮助。
    • 非虚拟机。我想我找到了合适的房产。我有点盲目 :D 但是第一个链接的 json 文件中的相应属性是一个数组。知道如何在属性文件中设置值吗?像 quarkus.keycloak.policy-enforcer.paths.2.methods.1.scopes=create 或 quarkus.keycloak.policy-enforcer.paths.2.methods.1.scopes=create ,阅读或quarkus.keycloak.policy-enforcer.paths.2.methods.1.scopes.1=create
    猜你喜欢
    • 2020-10-12
    • 2017-06-30
    • 2021-12-31
    • 2020-03-27
    • 1970-01-01
    • 2016-10-11
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多