Я пытаюсь внедрить приложение Angular с Spring Boot Restservice, защищенным Keycloak.
Локально на моем компьютере все работает найти. Приложение Angular загружается при помощи Keycloak (с keycloak- angular), поэтому я должен войти в систему, чтобы увидеть приложение. Приложение отправляет Restcalls в Spring Boot вместе с токеном. Restservice - keycloak.bearer-only получает токен и фильтрует, используя роли в токене.
Локально работает очень хорошо, но с момента развертывания на сервере я получаю ошибку 401 каждый раз, когда пытаюсь чтобы получить доступ к моему Restservice с включенным keycloak. (Я вошел в Keycloak и имею действительный токен).
Вот что я получаю в журнале отладки Spring Boot:
2020-04-06 12:28:54.854 DEBUG 1962 --- [nio-2001-exec-2] o.s.web.servlet.DispatcherServlet : "ERROR" dispatch for GET "/error", parameters={}
2020-04-06 12:28:54.875 DEBUG 1962 --- [nio-2001-exec-2] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)
2020-04-06 12:28:54.970 DEBUG 1962 --- [nio-2001-exec-2] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [application/json, text/plain, */*] and supported [application/json, application/*+json, application/json, application/*+json]
2020-04-06 12:28:54.971 DEBUG 1962 --- [nio-2001-exec-2] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [{timestamp=Mon Apr 06 12:28:54 CEST 2020, status=401, error=Unauthorized, message=No message availab (truncated)...]
2020-04-06 12:28:55.051 DEBUG 1962 --- [nio-2001-exec-2] o.s.web.servlet.DispatcherServlet : Exiting from "ERROR" dispatch, status 401
Keycloak - часть моего приложения Spring Boot .properties:
keycloak.enabled=true
keycloak.auth-server-url=http://172.16.1.20:8180/auth
keycloak.realm=Immodat
keycloak.resource=login-app
keycloak.bearer-only=true
keycloak.cors=true
keycloak.security-constraints[0].authRoles[0]=aa.intern.write
keycloak.security-constraints[0].securityCollections[0].patterns[0]=/
Существует один RestController, аннотированный с помощью CrossOrigin. И все методы в нем имеют GetMapping, PostMapping, ...
@RestController
@CrossOrigin
public class FormController {
@PostMapping("/forms")
Form createForm(@RequestBody Form form) {
/* ... */
}
@GetMapping("/forms/{name}")
Form getForm(@PathVariable String name) {
/* ... */
}
.
.
.
}
В Keycloak-Client-Settings оба параметра Return-Url и Web-Origin установлены на "*", чтобы разрешить доступ из любого места.
Есть ли что-то, что я пропускаю? Локально все отлично работает. На сервере также, если Keycloak отключен, но все три вместе не работают.