如何将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() {...}
}
如何整合这两件事?
答案 0 :(得分:3)
我在个人项目中遇到了同样的挑战,并且提到Keycloak项目没有为Payara提供原生适配器,在那一刻我做了一个库来保护我的应用程序与Keycloak,如果你愿意,你可以把它拿一个看看并告诉我它是否正常或我们如何改进它。
答案 1 :(得分:1)
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
中配置适配器。我没有测试过,所以我不知道它是否真的有效。
答案 2 :(得分:1)
您可以在The Payara Monthly Roundup for April 2019
中找到解决方案MicroProfile JWT with Keycloak-在此分步博客中,Hayri Cicek演示了如何使用MicroProfile JWT和Keycloak保护您的服务。
初始化LoginConfig并使用DeclareRoles映射角色
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();
}
}