Я немного борюсь с различными уроками, указывающими во всех направлениях, без всякой работы для меня.
Идея довольно проста: создать угловой интерфейс с защищенным бэкэндом Spring Boot, используя Keycloak в качестве индивидуальностиПоставщик.
Внешний интерфейс:
Для внешнего интерфейса я обнаружил, что один: https://www.npmjs.com/package/keycloak-angular, который хорошо работает для внешнего интерфейса.Я захожу на страницу, получаю перенаправление на страницу входа в keycloak и получаю пакет с токеном JWT в моих карманах.
В Keycloak я настроил клиент с протоколом 'openid-connect' и типом доступа 'public'
Backend:
Для Backend я пытаюсьиспользование Spring Boot в качестве сервера ресурсов добавило эти зависимости в мою сборку сборки:
implementation("org.springframework.security:spring-security-oauth2-jose")
implementation("org.springframework.security.oauth:spring-security-oauth2:2.3.4.RELEASE")
implementation("org.springframework.security:spring-security-oauth2-resource-server")
имел такую конфигурацию безопасности:
private val AUTH_WHITELIST: Array<String> = arrayOf(
// -- swagger ui
"/v2/api-docs", "/swagger-resources",
"/swagger-resources/**", "/configuration/ui",
"/configuration/security",
"/swagger-ui.html",
"/webjars/**"
)
@Throws(Exception::class)
override fun configure(http: HttpSecurity) {
http.cors()
.and().authorizeRequests()
.antMatchers(*AUTH_WHITELIST).permitAll()
.anyRequest().authenticated()
.and().logout().logoutUrl("/logout").permitAll()
.and().csrf().disable()
.oauth2ResourceServer().jwt().jwkSetUri(this.authProperties.jwt.jwkSetUri);
// .and().csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
}
и добавил следующие свойства в application.yml
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: http://localhost:8081/auth/realms/{{realm}}/protocol/openid-connect/certs
issuer-uri: http://localhost:8081/auth/realms/{{realm}}
В Keycloak я также создал клиента с протоколом 'openid-connect' и типом доступа 'только для канала'
. Для тестирования бэкэнда я использую swagger и поэтому создаю другого клиента.в протоколе keycloak 'openid-connect' и типе доступа 'public' и следовал этим инструкциям: Интеграция Keycloak в Swagger , которая также очень хорошо работает.
Frontend + Backend:
Теперь я пытаюсь собрать вещи вместе.Я создаю сервис во внешнем интерфейсе, вызывающий REST API.Я вижу, что CORS работает (OPTION Call сначала возвращает 200) Затем GET возвращает 401 даже с установленным заголовком авторизации:
Authorization bearer eyJhbGciOiJSUzI1NiIsInR…hz0zWAU3hFQR87stc8alj9asJqZPw
После настройки журнала безопасности для отладки он говорит что-то вроде
2019-01-03 14: 30: 58.183 DEBUG 17884 --- [nio-8080-exec-3] osswaAnonymousAuthenticationFilter: заполняет SecurityContextHolder анонимным токеном: 'org.springframework.security.authentication.AnonymousAuthenticationToken@355bb1;Полномочия: [ЗАЩИЩЕНО];Аутентифицировано: правда;Подробности: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 127.0.0.1;SessionId: null;Предоставленные полномочия: ROLE_ANONYMOUS '
Теперь я понятия не имею, что делать.Может быть, кто-нибудь может помочь.Thx