3

如何将KeycloakPayara Micro集成?

我想创建一个使用 Keycloak 作为身份验证和授权服务器的无状态 REST JAX-RS 应用程序,但我不知道该怎么做。

Eclipse MicroProfile JWT Authentication API 定义了@LoginConfig注解:

@LoginConfig(authMethod = "MP-JWT", realmName = "admin-realm")
@ApplicationPath("/")
public class MyApplication extends Application {...}

而java EE的@RolesAllowed注释:

@Path("/api/v1/books")
public class BooksController {

    @GET
    @RolesAllowed("read-books")
    public Books findAll() {...}

}

这两件事如何结合?

4

3 回答 3

3

我在个人项目中遇到了同样的挑战,正如提到的 Keycloak 项目没有为 Payara 提供本机适配器,在那一刻我做了一个库来保护我的应用程序与 Keycloak,如果你喜欢,你可以看一下并让我知道它是否可以或我们如何改进它。

https://github.com/pablobastidasv/kc_security

于 2018-05-15T11:18:12.057 回答
3

Keycloak 项目不为 Payara Server 或 Payara Micro 提供本机适配器,Payara 项目也不提供它。

但是 Keycloak 还提供了一个通用的 servlet 过滤器适配器,它也应该与 Payara Micro 一起使用:https ://www.keycloak.org/docs/latest/securing_apps/index.html#_servlet_filter_adapter

只需将依赖项添加到您的 Web 应用程序中并根据文档keycloak-servlet-filter-adapter配置适配器。web.xml不过我还没有测试过,所以我不知道它是否真的有效。

于 2018-05-15T06:53:16.910 回答
1

您可以在2019 年 4 月的 The Payara Monthly Roundup 中找到解决方案

MicroProfile JWT with Keycloak - 在这个分步博客中,Hayri Cicek 演示了如何使用 MicroProfile JWT 和 Keycloak 保护您的服务。

使用 DeclareRoles 初始化 LoginConfig 并映射您的角色

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import org.eclipse.microprofile.auth.LoginConfig;
import javax.annotation.security.DeclareRoles;

@LoginConfig(authMethod = "MP-JWT")
@ApplicationPath("/")
@DeclareRoles({ "mysimplerole", "USER" })
public class ApplicationConfig extends Application {

}

将参数添加到 microprofile-config.properties

mp.jwt.verify.publickey.location=http://localhost:8084/auth/realms/public/protocol/openid-connect/certs
mp.jwt.verify.issuer=http://localhost:8084/auth/realms/public

您可以在 RolesAllowed 中使用您的角色

@ApplicationScoped
@Path("/hello")
public class HelloWorldEndpoint {

    @GET
    @Produces("text/plain")
    @RolesAllowed("mysimplerole")
    public Response doGet() {
        return Response.ok("Hello from MicroProfile!").build();
    }
}
于 2020-01-31T17:34:19.507 回答