Keycloak 与 Spring boot 集成,使用自定义登录页面(在没有 keycloak 的默认登录页面的情况下登录)
Posted
技术标签:
【中文标题】Keycloak 与 Spring boot 集成,使用自定义登录页面(在没有 keycloak 的默认登录页面的情况下登录)【英文标题】:Keycloak Integration with Spring boot, using custom login page (Signing in without keycloak's default login page) 【发布时间】:2019-06-10 09:33:30 【问题描述】:我想要达到的目标: 用户可以使用我们项目的登录页面(项目内)登录,而无需重定向到 keycloak 的默认登录页面。我已经使用 Keycloak 配置了 Spring Security,它工作正常但用户通过 keycloak 的默认登录页面登录
我的问题:我怎样才能实现这个功能,我将使用 REST API 从 Keycloak 获取令牌
curl \
-d "client_id=id-client" \
-d "username=username" \
-d "password=psw" \
-d "grant_type=password" \
-d "client_secret=secret" \
"http://localhost:8080/auth/realms/myRealmName/protocol/openid-connect/token"
并允许访问我的 Spring 项目(无论是 Spring 安全性)
据我了解,我可以在前端使用 jquery 登录并获取令牌,最终传递给 spring security 或其他任何东西
任何帮助将不胜感激
【问题讨论】:
【参考方案1】:我们已经找到了解决这个问题的好方法,我将逐步解释: 首先,如果您想使用自定义登录页面,您有两种选择: 1.修改现有的keycloak主题,如登录/注册/密码更新,可以通过/keycloak/themes/*目录找到 2.这可能有点棘手-可以通过在您的项目中修改Spring Security的AuthenticationProvider来实现。
override fun configure(http: HttpSecurity?)
http
?.authorizeRequests()
?.antMatchers("/**")?.authenticated()
?.and()
?.authenticationProvider(myAuthenticationProvider)
?.formLogin()
?.loginPage("/login")
?.successHandler request, response, authentication -> redirectStrategy.sendRedirect(request, response, "/main")
?.permitAll()
?.usernameParameter("username") //the username parameter in the queryString, default is 'username'
?.passwordParameter("password") //the password parameter in the queryString, default is 'password'
?.and()
?.logout()
?.logoutUrl("/logout") //the URL on which the clients should post if they want to logout
?.invalidateHttpSession(true)
?.and()
?.exceptionHandling()
MyAuthenticationProvider 你应该重写这个 spring 安全类
我在上面的问题中还问过一件事,如果我使用 rest api 访问 spring 项目,在这种情况下你应该实现 KeycloakWebSecurityConfigurerAdapter 而不是 WebSecurityConfigurerAdapter
【讨论】:
如果有什么不懂的可以随时联系我))以上是关于Keycloak 与 Spring boot 集成,使用自定义登录页面(在没有 keycloak 的默认登录页面的情况下登录)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中将 keycloak 与不同的上下文根和反向代理集成
java.lang.IllegalStateException:当我尝试将 keycloak 与 spring boot web + spring security 项目集成时,当前用户主体不是类型
Keycloak - spring boot - 外部登录网页