[[415177]]太平洋在线百家乐
Keycloak对流行的Java应用提供了适配器。在系列著作的上一篇咱们演示了针对Spring Boot的安全保护,用的等于适配器的一种。Keycloak相似提供Spring Security的适配器,后续的几篇著作咱们就来共同学习Spring Security适配器的使用。
Keycloak的装置可参考前边的系列教程。
皇冠客服飞机:@seo3687 适配器集成在Spring 应用中咱们集成keycloak-spring-security-adapter:
皇冠体育一直以来都是博彩行业的佼佼者,其多样化的博彩游戏和出色的服务质量,一直受到玩家们的赞誉和追捧。除此之外,皇冠体育还一直积极参与公益事业,关注社会发展,用自己的力量为社会做出贡献。相信在未来的日子里,皇冠体育将会继续推陈出新,为玩家们带来更好的游戏体验。<dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-spring-security-adapter</artifactId> <version>15.0.0</version> </dependency>
在Spring Boot中不错这么集成:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-spring-boot-starter</artifactId> <version>15.0.0</version> </dependency>
然后就能诈欺Spring Security的特质来集成Keycloak。Keycloak 提供了一个 KeycloakWebSecurityConfigurerAdapter 算作创建WebSecurityConfigurer 实例的便捷基类。咱们不错编写了一个建设类来定制咱们的安全战术,就像这么:
@KeycloakConfiguration public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter { /** * 注册了一个Keycloak的AuthenticationProvider */ @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.authenticationProvider(keycloakAuthenticationProvider()); } /** * 界说会话战术 */ @Bean @Override protected SessionAuthenticationStrategy sessionAuthenticationStrategy() { return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl()); } /** * 常见的Spring Security安全战术 */ @Override protected void configure(HttpSecurity http) throws Exception { super.configure(http); http .authorizeRequests() .antMatchers("/customers*").hasRole("USER") .antMatchers("/admin/**").hasRole("base_user") .anyRequest().permitAll(); } }
凝视:上头的建设并弗成顺利。
建设完上头的然后咱们径直运转应用,成果并不像祈望的那样:
博彩平台游戏输赢记录java.io.FileNotFoundException: Unable to locate Keycloak configuration file: keycloak.json
抛出找不到 keycloak.json文献的超过。Keycloak撑捏的每个Java适配器齐不错通过一个绵薄的JSON文献进行建设,咱们缺失的等于这个文献。
{ "realm" : "demo", "resource" : "customer-portal", "realm-public-key" : "MIGfMA0GCSqGSIb3D...31LwIDAQAB", "auth-server-url" : "https://localhost:8443/auth", "ssl-required" : "external", "use-resource-role-mappings" : false, "enable-cors" : true, "cors-max-age" : 1000, "cors-allowed-methods" : "POST, PUT, DELETE, GET", "cors-exposed-headers" : "WWW-Authenticate, My-custom-exposed-Header", "bearer-only" : false, "enable-basic-auth" : false, "expose-token" : true, "verify-token-audience" : true, "credentials" : { "secret" : "234234-234234-234234" }, "connection-pool-size" : 20, "socket-timeout-millis": 5000, "connection-timeout-millis": 6000, "connection-ttl-millis": 500, "disable-trust-manager": false, "allow-any-hostname" : false, "truststore" : "path/to/truststore.jks", "truststore-password" : "geheim", "client-keystore" : "path/to/client-keystore.jks", "client-keystore-password" : "geheim", "client-key-password" : "geheim", "token-minimum-time-to-live" : 10, "min-time-between-jwks-requests" : 10, "public-key-cache-ttl": 86400, "redirect-rewrite-rules" : { "^/wsmaster/api/(.*)$" : "/api/$1" } }
上头包含的客户端建设属性齐不错在Keycloak罢休台进行建设,见下图:
村民代康率先提出自己的看法:“我建议在村规民约第七条规定中加入‘不准遗弃残疾人、虐待残疾人’的内容。”
此次展会由6大专业展组成,包括工业机械展、电力能源展、家居礼品展、建材五金展、消费电子及家用电器展和纺织服装展。展会总面积近1万5千平,中国近400家制造商及外贸公司参展。展会期间将吸引近2万余名南非及周边地区的专业买家来到现场,欧博官网网站与展商进行高效对接和一对一商洽。
金沙娱乐app建设Keycloak客户端属性
也等于说咱们需要的json文献和图中的建设项是对应的。比拟东说念主性化的是咱们不需要自行编写这个json文献,Keycloak提供了下载客户端建设的方法,这里我只使用了必要的建设项:
你不错下载客户端json建设
引入客户端建设固然成功拿到json文献,可是加载这个json建设却不太成功,经过我的摸索需要杀青一个KeycloakConfigResolver并注入Spring IoC,有底下两种杀青款式。
澳门六合彩娱乐城皇冠足球火博体育中国官方网站复用Spring Boot Adapter建设
径直复用Spring Boot的建设神志,先声明Spring Boot的KeycloakConfigResolver杀青:
/** * 复用spring boot 的方法 * * @return the keycloak config resolver */ @Bean public KeycloakConfigResolver keycloakConfigResolver() { return new KeycloakSpringBootConfigResolver(); }
然后复用Spring Boot的application.yaml的建设项:
皇冠电脑版网址复用Spring Boot建设项
正本的变装资源映射握住失效。
自界说杀青
你也不错自界说写剖判,这个本领json神志仍是不弥留了,你不错将json文献的内容存储到任何你擅长的地点。
/** * 我方写剖判 * * @return the keycloak config resolver */ @Bean public KeycloakConfigResolver fileKeycloakConfigResolver() { return new KeycloakConfigResolver() { @SneakyThrows @Override public KeycloakDeployment resolve(HttpFacade.Request request) { // json 文献放到resources 文献夹下 ClassPathResource classPathResource = new ClassPathResource("./keycloak.json"); AdapterConfig adapterConfig = new ObjectMapper().readValue(classPathResource.getFile(), AdapterConfig.class); return KeycloakDeploymentBuilder.build(adapterConfig); } }; }变装定名战术
Spring Security会为每个变装添加ROLE_前缀,这需要咱们声明GrantedAuthoritiesMapper的杀青SimpleAuthorityMapper来完成这一功能。Keycloak在KeycloakAuthenticationProvider中建设该功能:
KeycloakAuthenticationProvider authenticationProvider = keycloakAuthenticationProvider(); authenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());齐备的建设
applicaiton.yaml:
视讯真人keycloak: # 声明客户端所在的realm realm: felord.cn # keycloak授权管事器的地址 auth-server-url: http://localhost:8011/auth # 客户端称号 resource: springboot-client # 声明这是一个公开的客户端,不然弗成在keycloak外部环境使用,会403 public-client: true
这里要汇集Keycloak导出的json文献建设。
Spring Security建设:
@KeycloakConfiguration public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter { /** * 复用spring boot 的方法 * * @return the keycloak config resolver */ @Bean public KeycloakConfigResolver keycloakConfigResolver() { return new KeycloakSpringBootConfigResolver(); } /** * 我方写剖判 * * @return the keycloak config resolver */ // @Bean public KeycloakConfigResolver fileKeycloakConfigResolver() { return request -> { // json 文献放到resources 文献夹下 ClassPathResource classPathResource = new ClassPathResource("./keycloak.json"); AdapterConfig adapterConfig = null; try { adapterConfig = new ObjectMapper().readValue(classPathResource.getFile(), AdapterConfig.class); } catch (IOException e) { e.printStackTrace(); } return KeycloakDeploymentBuilder.build(adapterConfig); }; } /** * 建设{@link AuthenticationManager} * 这里会引入Keycloak的{@link AuthenticationProvider}杀青 * * @param auth the auth */ @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) { KeycloakAuthenticationProvider authenticationProvider = keycloakAuthenticationProvider(); authenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper()); auth.authenticationProvider(authenticationProvider); } /** * 会话身份考证战术 */ @Bean @Override protected SessionAuthenticationStrategy sessionAuthenticationStrategy() { return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl()); } /** * 建设 session 监听器 保证单点退出身效 * * @return the servlet listener registration bean */ @Bean public ServletListenerRegistrationBean<HttpSessionEventPublisher> httpSessionEventPublisher() { return new ServletListenerRegistrationBean<>(new HttpSessionEventPublisher()); } @Override protected void configure(HttpSecurity http) throws Exception { super.configure(http); http .authorizeRequests() .antMatchers("/customers*").hasRole("USER") .antMatchers("/admin/**").hasRole("base_user") .anyRequest().permitAll(); } }调用经过
资源客户端springboot-client有一个接口/admin/foo,当未登录调用该接口时会转发到:
http://localhost:8011/auth/realms/felord.cn/protocol/openid-connect/auth?response_type=code&client_id=springboot-client&redirect_uri=http://localhost:8080/sso/login&state=ec00d608-5ce7-47a0-acc8-8a20a2bfadfd&login=true&scope=openid
输入正确的用户密码后才调赢得祈望的成果。
典型的authorazation code flow。
回来Keycloak整合Spring Security的重心这里需要再梳理一下。在原生情况下,客户端的建设、用户的信息、变装信息齐由Keycloak隆重;客户端只隆重变装和资源的映射关系。后续会深切并定制Keycloak和Spring Security以中意本体场景需要。
本文转载自微信公众号「码农小胖哥」,不错通过以下二维码激情。转载本文请相干码农小胖哥公众号。
太平洋在线百家乐