gpt4 book ai didi

java - Quarkus 和 Keycloak : evaluate scope based permission

转载 作者:行者123 更新时间:2023-12-02 09:11:28 25 4
gpt4 key购买 nike

我有一个 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);
}
}

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

最佳答案

为了定义应 protected 确切范围并将其映射到适当的 HTTP 动词,您应该按照文档 here 配置策略强制执行器.

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

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

关于java - Quarkus 和 Keycloak : evaluate scope based permission,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59393229/

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