【问题标题】:Keycloak integration with CDI in REST API JAXRSREST API JAXRS 中的 Keycloak 与 CDI 集成
【发布时间】:2019-10-02 08:28:58
【问题描述】:

我们有一个 widlfy REST API jaxrs,我们想用 keycloak 保护它。

问题在于与@SecurityDomain("keycloak") 的集成仅适用于EJB 入口点。它在没有@Stateless 注释的类上被忽略

问题是入口点变成了 EJB 和 EJB poolManaged,这对于无状态应用程序来说并不是一件好事。 此外,EJB 中的所有方法都是事务性的,我们不希望这种行为。所以是的,我们可以添加一个事务性注释来指定在方法中不使用事务,但我认为这是一种解决方法。

我们希望尽我们所能与 CDI 合作。同时在 wildlfy 20 EJB 中使用 ejb 池管理的入口点可能会成为大型应用程序的瓶颈。

有什么想法吗?或使用 CDI 实现 keycloak 安全性的正确方法?

【问题讨论】:

  • 请改为添加“-”或大写回答问题...

标签: rest cdi keycloak wildfly-11 ejb-3.2


【解决方案1】:

如果您的意思是使用 @RolesAllowed 注释的声明式安全性,则并非所有 CDI bean 都支持,仅 EJB 和 Servlet 支持。

由于 JAX-RS 将在 web 应用程序上运行,因此您可以使用基于 url-patterns 的声明式安全性和使用 web.xml 中的 security-constraints 的 HTTP 方法

您还可以使用 SecurityContext 在 JAX-RS 方法(或过滤器)中实现编程安全性。

@Context
SecurityContext securityContext;

@GET
public Response get() {
    if (securityContext.isUserInRole("ROLE")) {
        ....
    }
    ....
}

虽然不是标准功能,Wildfly JAX-RS 实现 RestEasy 可以配置为支持 @RolesAllowed 注释。看: https://docs.jboss.org/resteasy/docs/4.4.2.Final/userguide/html/Securing_JAX-RS_and_RESTeasy.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-02
    • 2022-07-07
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2019-04-28
    • 2021-12-14
    相关资源
    最近更新 更多