Kubernetes и AAD аутентификация

В настроенном AKS есть докер-контейнер с приложением, использующим аутентификацию AAD.

На основании этой статьи также настроен входящий трафик. API работает хорошо.

Когда я добавляю URL-адрес ответа для регистрации приложения Azure Active Directory с префиксом https, я получаю сообщение об ошибке «URL-адрес ответа, указанный в запросе, не соответствует URL-адресам ответа, настроенным для приложения». И я вижу, что в адресной строке браузера redirect_uri начинается с http.

Когда я добавляю URL-адрес ответа, начинающийся с http, я получаю «Исключение: сбой корреляции».

Что я пробовал: добавить в ingress.yaml настройку ingress.kubernetes.io/force-ssl-redirect: "true"

Может быть, есть способ принудительно выполнить входящий запуск https вместо http, или может быть какая-то конфигурация перенаправления AAD? Любые идеи?

ОБНОВЛЕНИЕ 2: Вероятно, перенаправление http связано с ADAL.

PS: удалось найти аналогичную тему без отвечать

ОБНОВЛЕНИЕ 3: я решил не использовать nginx в качестве входа. Вместо этого я использую балансировщик нагрузки. Вскоре можно будет использовать Ingress Controller шлюза приложений Azure.


person Alexej Sommer    schedule 10.07.2018    source источник
comment
изменить все URL-адреса ответов на https?   -  person 4c74356b41    schedule 10.07.2018
comment
@ 4c74356b41, вы имеете в виду все URL-адреса ответов при регистрации приложения AAD? Не помогает   -  person Alexej Sommer    schedule 10.07.2018
comment
Не знаю конкретно, как это сделать, но вы должны установить биты аутентификации для redirect_uri как https.   -  person juunas    schedule 10.07.2018


Ответы (2)


Вы пробовали это?

По умолчанию контроллер перенаправляет HTTP-клиентов на HTTPS-порт 443, используя ответ 308 Permanent Redirect, если для этого входящего трафика включен TLS.

Это можно отключить глобально, используя ssl-redirect: "false" в карте конфигурации NGINX, или для каждого входа с аннотацией nginx.ingress.kubernetes.io/ssl-redirect: "false" в конкретном ресурсе.

Подробнее об этом по ссылке на документацию Ingress.

person Mihail Stancescu    schedule 12.07.2018
comment
Спасибо, @ mihail-stancescu. Хорошая находка, я еще не пробовал. Но все еще не решение. - person Alexej Sommer; 12.07.2018
comment
как упоминалось выше, он перенаправляет из коробки, и я обнаружил, что вход nginx и AAD работают при использовании регулярного выражения stackoverflow.com/a / 58521497/7061494 - person bcd; 23.10.2019

Вы должны решить, использовать HTTPS или нет. Если это только начало цикла разработки, начните без него и заставьте авторизацию работать, но внедряйте HTTPS как можно скорее.

AAD поддерживает как http, так и https, но, конечно, URL-адреса ответов должны быть соответственно добавлены в регистрацию приложения.

Как говорит @ mihail-stancescu, для ssl-redirect должно быть установлено значение false, если вы решите не использовать HTTPS. В дополнение к этому вы также должны убедиться, что ваше приложение не выполняет перенаправление с HTTP на HTTPS.

Использование curl с параметрами -L -k и -v предоставит вам много информации о том, что на самом деле происходит с вашими запросами.

Когда проблема с http / https решена, вам нужно удалить все аннотации перезаписи, которые есть на вашем входе. (например, ingress.kubernetes.io/rewrite-target: / следует удалить).

Теперь, если ваш входной путь к рассматриваемой службе, например, / myservice, то в URL-адрес ответа также должна быть добавлена ​​эта часть пути ([host] / myservice / signin-oidc) - как при регистрации приложения AAD, так и в конфигурации вашего приложения. (Путь в конфиге не должен содержать хост)

Если вы используете https, у вас также должен быть соответствующий сертификат. Вы можете использовать бесплатный LetsEncrypt (https://letsencrypt.org/) вместе с KubeLego (https://github.com/jetstack/kube-lego), где вы можете найти несколько хороших примеров того, как реализовать это.

person TechnoCowboy    schedule 29.07.2018
comment
Спасибо, @TechnoCowboy. Я хочу отметить это как ответ, но проблема в том, что nginx.ingress.kubernetes.io/ssl-redirect: true во входных аннотациях не перенаправляет на https в моем случае. Пытаюсь найти, что не так. - person Alexej Sommer; 31.07.2018