Keycloak Эмитент недействительного токена

У меня есть мобильное приложение (собственное реагирование), служба ресурсов (весенняя загрузка) и служба аутентификации Keycloak (Auth-Service).

Клиент выполняет аутентификацию напрямую через Auth-Service и получает токен доступа. Когда я делаю запрос к службе ресурсов, служба ресурсов проверяет токен доступа, запрашивая службу аутентификации. Но токен, полученный клиентским приложением и полем iss, равен http://10.0.2.2:8060/auth/realms/sau и моя служба ресурсов по адресу http://localhost:8110.

Keycloak говорит: error="invalid_token", error_description="Invalid token issuer. Expected 'http://localhost:8060/auth/realms/sau', but was 'http://10.0.2.2:8060/auth/realms/sau'"

У меня вопрос: как выполнить аутентификацию в службе ресурсов от имени моего клиента?

Мобильное приложение:

 export const prepareRequestBody = credentials => {
  const params = new URLSearchParams();
  params.append('username', credentials.username);
  params.append('password', credentials.password);
  params.append('client_id', "nasilim-mobile-app");
  params.append('grant_type', "password");
  return params;
};

export const login = credentials => {
  const params = prepareRequestBody(credentials);
  return axios.post(LOGIN, params);
};

введите описание изображения здесь

Ресурс-Сервис:

application.yml

keycloak:
  realm: sau
  resource: photo-service
  bearer-only: false
  auth-server-url: http://localhost:8060/auth
  credentials:
     secret: 69a3e80c-8360-42df-bcec-b6575a6949dc

введите описание изображения здесь

Примечание. Я проверил этот вопрос и попытался установите "X-Forwarded-For": "http://localhost:8060/", но это не сработало Keycloak возвращает: { "error": "invalid_request", "error_description": "HTTPS required" }

Вот Пример Токен доступа, полученной с помощью мобильного клиента.


person Muhammed Ozdogan    schedule 23.05.2020    source источник
comment
Мне пришлось использовать параметр keycloak.proxy-url christophewillemsen.com/2021/06/08/   -  person Christophe Willemsen    schedule 08.06.2021


Ответы (3)


Претензия iss различается в зависимости от запроса. Переменная KEYCLOAK_FRONTEND_URL может изменить это поведение. Так что попробуйте сделать, как показано ниже, в вашем файле docker-compose:

KEYCLOAK_FRONTEND_URL: http://10.0.2.2:8060/auth
person Canatto Filipe    schedule 10.11.2020

Вам необходимо настроить доступ из вашего приложения Spring Boot к серверу Auth внешним способом, а не localhost:

keycloak:
  realm: sau
  resource: photo-service
  bearer-only: false
  auth-server-url: http://10.0.2.2:8060/auth
  credentials:
     secret: 69a3e80c-8360-42df-bcec-b6575a6949dc

Таким образом, эмитенты токенов будут совпадать. Это, вероятно, потребует либо отключить требование SSL для внешнего запроса в keycloak, либо настроить правильную связь SSL. Если это предназначено для производства, поступайте правильно.

См. также:

person Xtreme Biker    schedule 26.05.2020

Что делать, если вы не можете получить доступ к серверу аутентификации с помощью внешнего адреса? Так не пойдет. Выберите https://issues.redhat.com/browse/KEYCLOAK-6984 Одно временное решение - установить открытый ключ reaml. Но это не рекомендуется, поскольку адаптер не будет проверять наличие нового ключа, если ключ повернут.

person nono    schedule 16.07.2020