keycloak+quarkus整合入门 weir 2021-11-24 11:54:14.0 keycloak,quarkus 1134 1.keycloak介绍 Keycloak是一款开源的认证授权平台,关于认证授权的全套服务,只有你想不到的,他都有。 顺便说下 Keycloak.X 低层基于quarkus重写的,不过现在不成熟,现下不建议使用,自己尝试可以。 2.quarkus集成keycloak keycloak集成spring网上已经有不少文章了,也有企业生产也在用,相比Spring Security keycloak也是开源界的王者,再加上spring对oauth的变动,我觉得keycloak可以是个好的选择,至少在第三方认证方面可以使用keycloak,然后自己实现RBAC细粒度权限控制。 3.keycloak的安装 无论是docker linux 还是mac 网上文章看看都可以实现,推荐一个(https://zhuanlan.zhihu.com/p/395683078) 我关键是想让你看到中文界面的,这不是挺好。 设置成中文界面 保存刷新页面即可。 4.开始代码实现 pom.xml 引入: <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-oidc</artifactId> </dependency> application.properties 引入: quarkus.oidc.auth-server-url=http://localhost:8080/auth/realms/weir-quarkus quarkus.oidc.client-id=quarkus-member-system quarkus.oidc.authentication.user-info-required=true 解释下url weir-quarkus 是域 可以理解为租户,多租户,http://localhost:8080/auth/realms/ 前面这些固定 client-id=quarkus-member-system 就是自己要创建的客户端 所以说 中文 还是非常必要的 测试代码: package com.weir.member.keycloak; import java.util.Map; import javax.annotation.security.RolesAllowed; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import org.eclipse.microprofile.jwt.JsonWebToken; import org.jboss.resteasy.annotations.cache.NoCache; import io.quarkus.oidc.UserInfo; import io.quarkus.security.identity.SecurityIdentity; @Path("users") public class UsersResource { @Inject SecurityIdentity securityIdentity; @RolesAllowed("user") @GET @Path("me") public Map<String, String> me() { return Map.of("username", securityIdentity.getPrincipal().getName()); } @Inject JsonWebToken jwt; @GET @Path("admin") @RolesAllowed("admin") public Map<String, String> name() { return Map.of("subject", jwt.getSubject(), "preferred_username", jwt.getClaim("preferred_username")); } @Inject UserInfo userInfo; @GET @Path("info") @RolesAllowed("user") @NoCache public Map<String, String> info() { return Map.of("sub", userInfo.getString("sub"), "email", userInfo.getString("email")); } } quarkus.oidc.authentication.user-info-required=true 作用就是 @Inject UserInfo userInfo; 获取用户信息的 用户 角色自己配: 测试认证: http://localhost:8080/auth/realms/weir-quarkus/protocol/openid-connect/token 注意方式 用户名密码需要登录下面截图重新设设置密码: 然后就就可以使用token了: 没有想想的复杂,当然只是入门,更高阶的功能等待尝试,包括和quarkus深度集成来实现自己系统的完整认证授权安全。