Интеграция Keycloak с загрузкой Spring, используя пользовательскую страницу входа (вход без стандартной страницы входа Keycloak) - PullRequest
0 голосов
/ 16 января 2019

Чего я пытаюсь достичь: Пользователь может выполнить вход с помощью страницы входа в наш проект (в рамках проекта) без перенаправления на страницу входа по умолчанию в keycloak. Я настроил Spring Security с Keycloak, он работает нормально Но пользователь входит в систему через страницу входа по умолчанию Keycloak

Мои вопросы: как мне добиться этой функции, когда я получу токен от Keycloak, используя REST API, например

   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 Project (безопасность Spring в любом случае)

Насколько я понимаю, я могу войти в систему с помощью jquery в моем внешнем интерфейсе и получить токен, в конце концов перейти к весенней защите или как угодно

Буду признателен за любую помощь

1 Ответ

0 голосов
/ 08 февраля 2019

Мы нашли хорошее решение этой проблемы, которое я собираюсь объяснить шаг за шагом: Прежде всего, если вы хотите использовать пользовательскую страницу входа, у вас есть два варианта: 1. Изменение существующей темы keycloak, такой как login / registration / passwordupdate, которую можно найти в каталоге / keycloak / themes / * 2. Это может быть немного сложно - этого можно добиться, изменив AuthenticationProvider в Spring Security в вашем проекте.

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 вы должны переопределить этот весенний класс безопасности

Еще одна вещь, которую я задал в предыдущем вопросе: что если я использую rest api для доступа к проекту Spring, в этом случае вам следует реализовать KeycloakWebSecurityConfigurerAdapter вместо WebSecurityConfigurerAdapter

...