В Keycloak отсутствует порт в ответе конфигурации OpenID - PullRequest
0 голосов
/ 10 марта 2020

Это кажется странным. Когда я получаю конфигурацию OpenID через Postman или в браузере, я получаю правильный ответ конфигурации.

Например, GET через Почтальон или в браузере на

http://127.0.0.1:8080/auth/realms/myrealm/.well-known/openid-configuration

возвращает конечную точку, включая порт 8080, правильно:

{
 snip
"jwks_uri": "http://127.0.0.1:8080/auth/realms/myrealm/protocol/openid-connect/certs"
snip
}

Однако выборка из тот же хост, цель, порт, схема (http) в моем приложении C ++ возвращает конечные точки конфигурации без порта (например, отсутствует 8080)

{
 snip
"jwks_uri":"http://127.0.0.1/auth/realms/myrealm/protocol/openid-connect/certs"
snip
}

Я не вижу проблем в моем клиентском коде C ++ Я не уверен, что это вообще меняет дело. Для полноты, это код C ++, который я использую рядом с фактическими значениями при отправке запроса, хотя это не должно быть вопросом используемого языка программирования:

    req_.version(version); // HTTP 1.1
    req_.method(method); // GET
    req_.target(target); // /auth/realms/myrealm/.well-known/openid-configuration
    req_.set(http::field::host, host); // 127.0.0.1
    static const std::string agent = app.myAgent(); 
    req_.set(http::field::user_agent, agent);
    req_.set(http::field::content_type, contentType); // application/json

У меня здесь два вопроса:

1) Что заставляет Keycloak не добавлять порт в конечные точки? И как это обойти?

2) В чем разница между звонками? Это должен быть ванильный запрос GET.

1 Ответ

0 голосов
/ 10 марта 2020

Разобрался. Согласно HTTP spe c порт должен быть включен в имя хоста, если оно не является именем по умолчанию:

https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14 .23

Это разрешило вопрос. Хотя, на мой взгляд, это должно быть исправлено и в Keycloak. Я ожидаю, что stati c URL, а не то, что меняется в зависимости от вашего запроса. Например, вы можете установить host в localhost во время запроса, и он вернет «localhost» в конфигурации, установить его на 127.0.0.1, и он вернет это. Что он вернет для реального IP-адреса при локальном запросе, но сервер имеет опубликованный c IP? Я не пробовал, но это кажется достаточно странным.

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