Angular - Spring Boot - Keycloak - ошибка 401 - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь внедрить приложение 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 отключен, но все три вместе не работают.

1 Ответ

0 голосов
/ 06 апреля 2020

Хорошо, я нашел проблему. Может быть, немного глупо.

На одном из трех серверов было неправильное время, поэтому токен Keycloak-Token не подходит для этого.

Проверьте ваше серверное время, если у вас есть ошибка 401 и вы не знаете почему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...