如何将Keycloak与Payara 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() {...}
}
如何将这两件事结合起来?
Keycloak项目没有为Payara Server或Payara Micro提供本机适配器,Payara项目也没有提供。
但是Keycloak也提供了一个通用的servlet过滤器适配器,它也应该与Payara Micro一起使用:https://www.keycloak.org/docs/latest/securing_apps/index.html#_servlet_filter_adapter
只需将keycloak-servlet-filter-adapter
依赖项添加到 Web 应用程序中,并根据文档在web.xml
中配置适配器。不过我还没有测试过它,所以我不知道它是否真的有效。
我在个人项目中遇到了同样的挑战,如前所述,Keycloak 项目没有为 Payara提供本机适配器,在那一刻我做了一个库来保护我的应用程序使用 Keycloak,如果你愿意,你可以看看它,让我知道它是否可以或我们如何改进它。
https://github.com/pablobastidasv/kc_security
您可以在2019年4月的Payara月度综述中找到解决方案
MicroProfile JWT with Keycloak- 在这个分步博客中,Hayri Cicek 演示了如何使用 MicroProfile JWT 和 Keycloak 保护您的服务。
初始化登录配置并使用声明角色映射您的角色
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
您可以在"允许的角色"中使用您的角色
@ApplicationScoped
@Path("/hello")
public class HelloWorldEndpoint {
@GET
@Produces("text/plain")
@RolesAllowed("mysimplerole")
public Response doGet() {
return Response.ok("Hello from MicroProfile!").build();
}
}