从 Keycloak 导出和导入 Realm 和用户

1. 首先对keycloak 命令有所了解

需要将 Keycloak 中的 Realm 导出或导入时,您可以使用 JSON 文件进行操作。以下是一些有关导出和导入 Realm 的方法:

  1. 导出 Realm 到目录

    • 使用 export 命令将 Realm 导出到目录。在执行此命令时,确保您的 Keycloak 服务器实例未启动。
    • 命令示例:bin/kc.[sh|bat] export --dir <dir>
    • 服务器将为每个导出的 Realm 创建单独的文件。
  2. 在启动过程中导入 Realm

    • 使用 --import-realm 选项,在服务器启动时导入 Realm 配置文件。
    • 命令示例:bin/kc.[sh|bat] start --import-realm
    • 服务器将尝试从 data/import 目录中导入任何 Realm 配置文件。

2. 导出一个领域 和 用户

  • 登陆keycloak docker, 使用root 登陆不用stop keycloak service
    docker exec -u root -it keycloak /bin/bash
  • 进入keycloak folder 
    cd opt/keycloak

  • 运行命令导出 Realm and 用户数据。
    ./bin/kc.sh export --realm mytest --dir ./data --users realm_file
    • ./bin/kc.sh:这是 Keycloak 的启动脚本。您需要在 Keycloak 安装目录中运行此脚本。
    • export:这是一个 Keycloak 命令,用于执行导出操作。
    • --realm mytest:指定要导出的 Realm 名称为 mytest
    • --dir ./data:指定导出文件的目录为 ./data
    • --users:这个选项表示只导出用户信息,而不包括其他配置信息。
    • realm_file:用户将导出到与领域设置相同的文件。对于名为“mytest”的领域,这将是包含领域数据和用户的“mytest-realm.json”。

 3. 导入一个领域 和 用户

  • 登陆keycloak UI , 然后创建一个Realm
  • 将你的mytest-realm.json 拖进到上传box 中,然后点击创建就可以了

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot 的 Shiro 和 Keycloak 可以实现身份认证和授权。下面是一个简单的步骤: 1. 在 pom.xml 文件添加 Shiro 和 Keycloak 依赖: ```xml <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.5.3</version> </dependency> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-spring-boot-starter</artifactId> <version>${keycloak.version}</version> </dependency> ``` 2. 在 application.properties 文件添加 Shiro 和 Keycloak 配置: ```properties # Shiro 配置 shiro.loginUrl=/login shiro.successUrl=/ shiro.unauthorizedUrl=/403 # Keycloak 配置 keycloak.realm=your-realm keycloak.auth-server-url=http://localhost:8080/auth keycloak.ssl-required=external keycloak.resource=your-client-id keycloak.credentials.secret=your-client-secret ``` 3. 创建一个 Shiro 配置类: ```java @Configuration public class ShiroConfig { @Bean public DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(shiroRealm()); return securityManager; } @Bean public ShiroRealm shiroRealm() { return new ShiroRealm(); } @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); shiroFilterFactoryBean.setLoginUrl("/login"); shiroFilterFactoryBean.setSuccessUrl("/"); shiroFilterFactoryBean.setUnauthorizedUrl("/403"); Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/login", "anon"); filterChainDefinitionMap.put("/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; } } ``` 4. 创建一个 Shiro Realm: ```java public class ShiroRealm extends AuthorizingRealm { @Autowired private KeycloakSecurityContext securityContext; @Autowired private KeycloakPrincipalExtractor principalExtractor; @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); authorizationInfo.addRoles(principalExtractor.extractRoles(securityContext)); return authorizationInfo; } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { KeycloakAuthenticationToken keycloakToken = (KeycloakAuthenticationToken) token; KeycloakPrincipal principal = (KeycloakPrincipal) keycloakToken.getPrincipal(); User user = principalExtractor.extractUser(principal); SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user, token.getCredentials(), getName()); return authenticationInfo; } } ``` 5. 创建一个 Keycloak Principal Extractor: ```java @Component public class KeycloakPrincipalExtractor { public User extractUser(KeycloakPrincipal<KeycloakSecurityContext> principal) { User user = new User(); user.setUsername(principal.getName()); return user; } public Set<String> extractRoles(KeycloakSecurityContext securityContext) { AccessToken accessToken = securityContext.getToken(); return accessToken.getRealmAccess().getRoles(); } } ``` 6. 创建一个 Controller: ```java @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } @GetMapping("/admin") public String admin() { return "admin"; } @GetMapping("/login") public String login() { return "login"; } } ``` 现在,当用户访问 /admin 路径时,只有拥有 admin 角色的用户才能访问该路径。用户可以通过 /login 路径进行身份验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田猿笔记

写文章不容易,希望大家小小打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值