【问题标题】:How to integrate Keycloak with Payara Micro?如何将 Keycloak 与 Payara Micro 集成?
【发布时间】:2018-10-23 11:31:47
【问题描述】:

如何将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() {...}

}

这两件事如何结合?

【问题讨论】:

    标签: rest jax-rs keycloak payara-micro microprofile


    【解决方案1】:

    您可以在The Payara Monthly Roundup for April 2019找到解决方案

    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();
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      https://github.com/pablobastidasv/kc_security

      【讨论】:

      • 非常感谢!!现在您可以使用 keycloak 配置更新自述文件、如何获取令牌、如何注销以及如何使用 mp-config 使用外部配置(没有 microprofile-config.properties)?
      • 您可以通过环境变量或java属性发送配置,配置文件可以默认使用。关于token,此时app library已经被测试过可以和service一起使用,在这种情况下token应该是由FE获取的,是不是也需要保护web页面??
      • 是的,我希望创建一个带有 jax-rs 和 microprofile 的后端服务器以及一个带有 nodejs 和 angular 的前端服务器,两者都使用 keycloak。
      • 在这种情况下,我所做的库将起作用(我正在努力进行一些改进)。关于angular app,可以使用blog.keycloak.org/2018/02/keycloak-and-angular-cli.html制作FE部分。
      • 新版本发布,现在您可以使用keycloak.json文件来定义您的配置。
      【解决方案3】:

      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 中配置适配器。不过我还没有测试过,所以我不知道它是否真的有效。

      【讨论】:

      • 我已经看过这个选项,但我想使用 Eclipse 微配置文件规范进行配置。此选项使用 web.xml 进行配置,我希望使用 mp-config 规范使用外部配置。
      • 可以在 web.xml 中使用对系统属性和环境变量的引用:docs.payara.fish/documentation/payara-server/… 但是,这并没有提供与使用 MicroProfile Config 相同的灵活性,而且 Pablo 的 Soteria 插件看起来很不错!
      • @ThomásSousaSilva 你找到用 mp-jwt 和 payara 实现配置的方法了吗?
      猜你喜欢
      • 1970-01-01
      • 2021-01-10
      • 2020-02-20
      • 2015-10-31
      • 1970-01-01
      • 2022-07-11
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      相关资源
      最近更新 更多