У меня есть микросервис, работающий за API-шлюзом (Zuul), который имеет защищенные конечные точки с помощью Keycloak. Keycloak всегда возвращает 401 для защищенных конечных точек при доступе из клиента publi c (например, почтальона) даже с действующим токеном. Я проделал тот же сценарий без использования шлюза API и отлично работает, что изолирует проблему только что добавленному шлюзу api. (Настроили клиентов, роли и пользователей в keycloak).
Служба шлюза Клиент является конфиденциальным, а клиент службы API - publi c, в keycloak.
Все службы, включая keycloak, работают как docker контейнеры. Ниже приведена загрузка keycloak-spring конфигурации в файле свойств.
keycloak :
realm : admin-realm
auth-server-url : http://keycloak:8080/auth
ssl-required : external
resource : gateway-service
bearer-only : true
credentials.secret : *********************
#
security-constraints[0] :
authRoles[0] : user
securityCollections[0] :
patterns[0] : /api/*
Решено
Проблема заключалась в несоответствии URL-адреса эмитента токена (http://localhost: 8080 / auth / ) и URL-адрес конфигурации keycloak в файле свойств микросервиса (http://keycloak: 8080 / auth).
Это происходит, когда я тестировал микросервис из-за пределов сети docker. (От почтальона). Это могло быть решено после того, как я добавил имя хоста 'keycloak; в файл хоста Windows,
- Откройте c: \ Windows \ System32 \ Drivers \ etc \ hosts файл от имени администратора
- Добавьте 127.0.0.1 keycloak
Затем от почтальона мы могли бы получить доступ к конечной точке keycloak как,
- http://keycloak: 8080 / auth ......